我一直在对我们喜欢的一个项目和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和语句并不是封闭的,所以我最终把它们封闭起来:
finally{
try{
rs.close()
}catch(SqlException se){
//log it
}
try{
stmt.close();
}catch(SqlException se){
//log it
}
conn.close();
}但我在许多项目中遇到了上述模式(来自相当多的公司),并且没有人关闭ResultSets或语句。
你有没有遇到过ResultSets和语句在连接关闭时没有关闭的问题?
我只找到了this,它指的是Oracle在关闭连接时存在关闭ResultSets的问题(我们使用Oracle db,因此我进行了更正)。java.sql.api在Connection.close() javadoc中什么也没说。
https://stackoverflow.com/questions/103938
复制相似问题