这只是java程序员的愚蠢行为。 我有类似
的东西PreparedStatement stmt = DBConnection.getConnection()
.prepareStatement(sql);
现在在最后一个块中我检查stmt是否存在然后关闭它。在这种情况下,Connection
对象会发生什么。我知道如果我用不同的行写,那么我可以关闭它,因为我有一个连接对象的引用,在这种情况下我没有。
答案 0 :(得分:3)
在这种情况下,
Connection
对象会发生什么。
无。没有魔法,所以连接并没有神奇地关闭,只是因为你没有把它分配给变量。
这就是为Connection
使用单独变量的原因:您可以致电close()
!或者使用try-with-resources:
try (Connection connection = DBConnection.getConnection()) {
PreparedStatement stmt = connection.prepareStatement(sql);
}
答案 1 :(得分:-1)
连接将保持打开状态,直到将来某个时候收集垃圾为止。
但是,对于连接池,您的可能不是对Connection的唯一引用(如果池还维护对已借用的连接的引用)。在这种情况下,不会进行垃圾收集,也不会关闭收集。它会泄漏"泄漏"从游泳池,这可能最终导致游泳池耗尽,并且不再有其他连接。