Java 重用PreparedStatement

Java 重用PreparedStatement,java,prepared-statement,findbugs,Java,Prepared Statement,Findbugs,我在代码库上运行了findbugs,它指出还有两条语句需要关闭。在我们运行的代码的这一部分中: preparedStatement = connection.prepareStatement(query); 对于3个不同的查询,重用preparedStatement。在最后一个块中,我们确实关闭了资源: finally{ try{ if (resultSet != null) resultSet.close(); } catch (Exception

我在代码库上运行了findbugs,它指出还有两条语句需要关闭。在我们运行的代码的这一部分中:

preparedStatement = connection.prepareStatement(query);
对于3个不同的查询,重用preparedStatement。在最后一个块中,我们确实关闭了资源:

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);
   }

应该在下一次连接之前关闭该语句。prepareStatement(查询);或者这是findbugs在谨慎吗?

是的,在执行下一个连接之前必须关闭该语句。prepareStatement。否则,您将失去对前一个未关闭的引用(即泄漏声明)。用try{}finally{}围绕每个语句使用,在finally中关闭它。

是否需要引用无关紧要。调用connection.prepareStatement(查询)时,您正在该连接中创建preparedStatement。他们将坐在那里直到连接关闭。当您最后点击该按钮时,您只关闭该变量所指向的准备好的语句。保留3个中的2个,直到连接关闭。在生产过程中,如果您不移除Bandoned(tomcat)或类似工具,您将继续泄漏连接并最终耗尽连接。感谢您的解释!添加了更改:)我还想指出,在关闭连接时,应该清理泄漏的语句,最好分别关闭每个语句。如果此代码在一个打开的连接中重复多次,您会发现自己的资源不足(一次2条语句=])