重用PreparedStatement

Ann*_*cks 4 java findbugs prepared-statement

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

preparedStatement = connection.prepareStatement(query);
Run Code Online (Sandbox Code Playgroud)

对于3个不同的查询,重用prepareStatement.在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);
   }
Run Code Online (Sandbox Code Playgroud)

语句是否应在下一个connection.prepareStatement(query)之前关闭; 或者这个发现者是否谨慎?

Mar*_*zle 9

是的,必须在执行下一个connection.prepareStatement之前关闭该语句.否则,您将丢失对未关闭的前一个(即泄漏语句)的引用.围绕每个语句使用包裹try {} finally {},在finally中关闭它.