Делает закрытие a java.sql.Connection
также закройте все операторы, подготовленные операторы, и т.д. полученные из того соединения? Или там будет утечкой памяти, если я закрываю соединение, но оставляю операторы, и т.д. открытые?
Закрывает ли java.sql.Connection также все операторы, подготовленные операторы и т. Д. Полученные {{ 1}} от этого соединения? Или произойдет утечка памяти, если я закрою соединение , но оставлю операторы, и т. Д. Незакрытыми?
Вы не должны не полагаться в теме.
Спецификация гласит следующее:
Приложение вызывает метод Statement.close, чтобы указать, что оно завершило обработку оператора. Все объекты Statement будут closed , когда соединение, создавшее их , закрывается. Однако хорошей практикой кодирования приложений является закрытие операторов , как только они завершили их обработку. Это позволяет немедленно освободить любые внешние ресурсы, которые использует оператор .
Лучше всего закрыть ВСЕ ResultSet, операторы и соединения в блоке finally, каждый из которых заключен в отдельный блок try / catch, в обратном порядке получения.
Напишите такой класс:
public class DatabaseUtils
{
public static void close(Statement s)
{
try
{
if (s != null)
{
s.close();
}
}
catch (SQLException e)
{
// log or report in someway
e.printStackTrace();
}
}
// similar for ResultSet and Connection
}
Вызовите его так:
Statement s;
try
{
// JDBC stuff here
}
finally
{
DatabaseUtils.close(s);
}