JDBC не боров памяти. Данные, которые он возвращает, могут быть огромной памятью.
Одной из распространенных проблем с JDBC является то, что наборы результатов, которые содержат огромное количество данных (и не всегда оптимизированы для памяти), не обрабатываются или закрываются неправильно. Чтобы предотвратить утечки памяти из-за объекта ResultSet, разработчик должен предпринять осторожные шаги, чтобы убедиться, что память освобождена, прежде чем двигаться дальше. (Java обрабатывает большую часть очистки памяти, что означает, что это слепая зона для большинства разработчиков, поэтому это не удивительно.)
Рассмотрите возможность использования этого кода. Для окончательного закрытия результирующего набора используется шаблон «try / catch try / finally»:
try{
Statement stmt = conn.createStatement();
try {
ResultSet rs = stmt.createQuery("some sql");
try {
// ResultSet processing goes here
} finally {
rs.close();
}
} finally {
stmt.close();
}
}
catch ( SQLException ex ) { // exception processing for any problems. }
Это гарантирует, что результирующий набор закрыт, даже если выдается исключение.