java大量关闭连接和语句

问题描述

在程序结束之前关闭所有语句和连接很重要。 我知道我可以在 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了解更多信息