【发布时间】:2010-11-04 07:47:15
【问题描述】:
我在我们的代码库上运行了 findbugs,它指出还有两个语句仍然需要关闭。在我们运行的这部分代码中:
preparedStatement = connection.prepareStatement(query);
对于 3 个不同的查询,重用preparedStatement。在 finally 块中,我们确实关闭了资源:
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(query)之前关闭还是这个 findbugs 很谨慎?
【问题讨论】:
-
您是否需要参考是无关紧要的。当您调用 connection.prepareStatement(query) 时,您正在该连接中创建preparedStatement。那些将坐在那里,直到连接关闭。当你最终点击它时,你只是关闭了该变量指向的准备好的语句。留下 3 个中的 2 个,直到连接关闭。在生产中,如果您不删除Abandoned(tomcat) 等,您将继续泄漏连接并最终耗尽。
-
感谢您的解释!添加了更改:)
标签: java prepared-statement findbugs