【问题标题】:java massively close connections and statementsjava 大规模关闭连接和语句
【发布时间】:2021-08-07 21:29:36
【问题描述】:

在程序结束之前关闭所有语句和连接很重要。 我知道我可以在 try 子句中创建它们,这样我就可以让它们在块结束时自行关闭,但在某些情况下,最好让它们保持打开状态,我必须手动插入一个 void 来关闭它们。 那么,有没有一种简单的方法可以大规模关闭所有打开的preparedstatements、 statements 和连接? 我的意思是,不需要像这样记住所有这些?

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

(我习惯使用列表,因为顺序被保留)然后...

for (AutoCloseable c:toClose) if (c != null) {
        try {
            c.close();
        } catch (Exception e) {}
}

有更好的主意吗?

【问题讨论】:

    标签: java sql connection prepared-statement


    【解决方案1】:

    由于他们实现了AutoCloseable 因此java.io.Closeable,您可以简单地使用try-with-resources 语句,这将确保每个资源都在语句末尾关闭,

    更多信息请见https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

    【讨论】:

    • 我说我知道但是在程序结束后我不想关闭准备好的语句的情况怎么办?外面的街区?
    • 啊,没注意到你知道,但还是不明白这个问题,为什么你不想关闭它们?
    • 我打开preparedstatement一次,然后等待用户按下按钮,每次抛出事件,我必须执行一些准备好的查询。所以为了表演,最好让它们保持打开状态,因为 sql 计划仍然处于活动状态。
    • 在所有其他情况下,try(Connection conn...) 是一个很好的方法,我同意。
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 2014-02-24
    • 2011-07-07
    • 2017-01-31
    • 2011-11-29
    • 2015-09-19
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多