问题描述
在程序结束之前关闭所有语句和连接很重要。 我知道我可以在 try 子句中创建它们,这样我就可以让它们在块结束时自行关闭,但在某些情况下,最好让它们保持打开状态,我必须手动插入一个 void 来关闭它们。 那么,有没有一种简单的方法可以大量关闭所有打开的预准备语句、语句和连接? 我的意思是,不需要像这样记住所有这些?
pstmtC1.close();
pstmtC2.close();
Conn2.close();
pstmtB1.close();
ConnB1.close():
...
我正在寻找类似的东西
PreparedStatement.closeAllInstances();
Connection.closeAllInstances();
从现在开始我发现的最好方法是将每个连接、preparedstatement 和语句添加到 AutoCloseable 列表(或集合或数组...)中,例如在初始化(第一个语句和它们的连接之后)之后调用例如 toClose这个:
List<AutoCloseable> toClose = new ArrayList<AutoCloseable>();
toClose.add(pstmtC1);
toClose.add(pstmtC2);
toClose.add(connC1);
...
(我使用 list 因为顺序被保留)然后...
for (AutoCloseable c:toClose) if (c != null) {
try {
c.close();
} catch (Exception e) {}
}
有什么更好的主意吗?
解决方法
由于它们实现了 AutoCloseable
因此 java.io.Closeable
,您可以简单地使用 try-with-resources 语句,这将确保每个资源在语句结束时关闭,
查看https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html了解更多信息