在Java中关闭数据库连接

时间:2014-06-29 03:14:43

标签: java jdbc

这只是java程序员的愚蠢行为。 我有类似

的东西
PreparedStatement stmt = DBConnection.getConnection()
                .prepareStatement(sql);

现在在最后一个块中我检查stmt是否存在然后关闭它。在这种情况下,Connection对象会发生什么。我知道如果我用不同的行写,那么我可以关闭它,因为我有一个连接对象的引用,在这种情况下我没有。

2 个答案:

答案 0 :(得分:3)

  

在这种情况下,Connection对象会发生什么。

无。没有魔法,所以连接并没有神奇地关闭,只是因为你没有把它分配给变量。

这就是为Connection使用单独变量的原因:您可以致电close()!或者使用try-with-resources:

try (Connection connection = DBConnection.getConnection()) {
    PreparedStatement stmt = connection.prepareStatement(sql);
}

答案 1 :(得分:-1)

连接将保持打开状态,直到将来某个时候收集垃圾为止。

但是,对于连接池,您的可能不是对Connection的唯一引用(如果池还维护对已借用的连接的引用)。在这种情况下,不会进行垃圾收集,也不会关闭收集。它会泄漏"泄漏"从游泳池,这可能最终导致游泳池耗尽,并且不再有其他连接。