连接关闭时结果集未关闭?
我一直在为我们的一个宠物项目和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();
}
但是我在很多项目中都遇到了上述模式(来自相当多的公司),没有人关闭ResultSet或Presence。
在关闭连接时,是否遇到过未关闭结果集和语句的问题?
我只发现了这一点,它指的是Oracle在关闭连接时关闭ResultSets时遇到了问题(我们使用Oracle db,因此我的更正)。java.sql.api 在 Connection.close() javadoc 中什么也没说。