Я запустил findbugs на нашей базе кода, и он указал, что еще два заявления, которые еще нужно закрыть. В этом разделе кода, который мы запускаем:Повторное использование подготовленного состояния
preparedStatement = connection.prepareStatement(query);
для 3 различных запросов, повторное использование подготовлено. В конце концов блок мы закрыть ресурс:
finally{
try{
if (resultSet != null)
resultSet.close();
} catch (Exception e) {
exceptionHandler.ignore(e);
}
try {
if (preparedStatement != null)
preparedStatement.close();
} catch(Exception e) {
exceptionHandler.ignore(e);
}
Если заявление закрывается до следующего connection.prepareStatement (запроса); или это подозрительные подозрения?
Независимо от того, нужна ли эта ссылка, несущественна ли она. Когда вы вызываете connection.prepareStatement (query), вы создаете в этом соединении readyStatement. Они будут сидеть там, пока соединение не будет закрыто. Когда вы нажмете это, вы, наконец, закрываете только подготовленный оператор, на который указывает эта переменная. Оставляя 2 из 3, пока соединение не будет закрыто. В процессе производства вы продолжите утечку соединений и, в конечном счете, закончите, если не удалите Abandoned (tomcat) или тому подобное. – Zach
Спасибо за объяснение! Добавлены изменения :) –