Я делаю обзор кода (в основном используя такие инструменты, как FindBugs) одного из наших проектов для домашних животных, и FindBugs, помеченные следующим кодом как ошибочные (псевдокоды):
Connection conn = dataSource.getConnection();
try{
PreparedStatement stmt = conn.prepareStatement();
//initialize the statement
stmt.execute();
ResultSet rs = stmt.getResultSet();
//get data
}finally{
conn.close();
}
Ошибка в том, что этот код может не освобождать ресурсы. Я понял, что ResultSet и Statement не были закрыты, поэтому я окончательно их закрыл:
finally{
try{
rs.close()
}catch(SqlException se){
//log it
}
try{
stmt.close();
}catch(SqlException se){
//log it
}
conn.close();
}
Но я столкнулся с вышеупомянутым шаблоном во многих проектах (из нескольких компаний), и никто не закрывал ResultSets или Statementments.
У вас были проблемы с ResultSets и заявлениями, которые не закрываются, когда соединение закрыто?
Я нашел только это, и это относится к Oracle, имеющему проблемы с закрытием ResultSets при закрытии Connections (мы используем Oracle db, следовательно, мои исправления). java.sql.api ничего не говорит в Connection.close() javadoc.