我在我们的代码库上运行了findbugs,它指出还有两个语句仍需要关闭。在代码的这一部分中,我们运行:
preparedStatement = connection.prepareStatement(query);
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); }
应该在下一个连接之前关闭该语句。prepareStatement(query); 还是这个findbug谨慎?
是的,在执行下一个connection.prepareStatement之前必须关闭该语句。否则,您将丢失对未关闭的前一个引用(即泄漏的语句)。在每个语句的使用处使用try {} finally {}进行包装,并在finally中将其关闭。