Нет, GC вам здесь не поможет, потому что речь идет не о памяти.
Соединение - это дефицитный ресурс на сервере баз данных , а не в клиенте приложения . Если вы очистите свою память, не сказав server , чтобы сделать то же самое, вы потеряете соединение, которое не может быть восстановлено. В конце концов вы закончите.
То же самое с ResultSet - это курсор.
Вы должны всегда закрывать все ресурсы SQL - Connection, Statement и ResultSet - в отдельных блоках finally, заключенных в блоки try / catch, в обратном порядке получения.
public class JdbcTemplate {
public Object exampleSqlOperation(Connection c) throws SQLException {
Object results = null;
Statement st = null;
ResultSet rs = null;
try {
// SQL stuff here
// Load into results Object - data structure
} catch (SQLException e) {
e.printStackTrace(); // Better to log it.
} finally {
DatabaseUtils.close(rs);
DatabaseUtils.close(st);
}
return results;
}
}
public class DatabaseUtils {
public static void close(Connection c) {
try {
if (c != null) c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// Same for Statement, ResultSet
}