Влияние java.sql. Connection.close () на java.sql. Оператор возражает и т.п.

Делает закрытие a java.sql.Connection также закройте все операторы, подготовленные операторы, и т.д. полученные из того соединения? Или там будет утечкой памяти, если я закрываю соединение, но оставляю операторы, и т.д. открытые?

6
задан Lambda 25 April 2010 в 15:12
поделиться

1 ответ

Закрывает ли 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);
}
11
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: