Набор результатов JDBC не закрыт. следствие? - PullRequest
1 голос
/ 21 сентября 2011

HI: у нас есть несколько чистых подготовленных заявлений JDBC, после выполнения запроса мы обрабатываем набор результатов. Но мы никогда не закрываем набор результатов, хотя мы закрываем утверждение. При повторном выполнении этого подготовленного заявления, например, миллион раз, произойдет утечка памяти?

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Закрытие оператора должно позволить результирующему набору получить мусор.однако закрытие оператора неявно закроет набор результатов, так как вы можете продолжать его использовать?Все это заключено в блок try-catch-finally, который устанавливает для оператора и набора результатов значение null в блоке finally?

В противном случае, если вы выбросите исключение, вы можете проверить соединения, а также оператор и набор результатов.может не подключитьсяТ.е. до тех пор, пока вы остаетесь со сценарием счастливого дня, все будет хорошо, но это может привести к поломке, если что-то пойдет не так, поскольку отсутствие сброса в блоке finally с нулевым значением может помешать сборке мусора и уничтожить все ваши ресурсы (например, соединения).).

0 голосов
/ 18 марта 2014

Теоретически закрытие оператора должно закрывать ResultSet.Но в реальной жизни дело обстоит иначе.

Да, есть причины явно закрыть объекты ResultSet (или использовать новый синтаксис try-with-resources, чтобы закрыть их).См. этот ответ для получения дополнительной информации. Ограничения проектирования и ошибки слишком часто встречающиеся в драйверах JDBC, пулах соединений и базе данных могут вызвать проблемы.

...