0

在 Java中关闭数据库连接的后续问题

Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword" );

Statement stmt = conn.createStatement();
try {
    stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );
} finally {
    //It's important to close the statement when you are done with it
    stmt.close();
}
conn.close();

我知道 conn.close() 是必要的,但不知道为什么。一旦方法调用结束,垃圾收集器不会释放连接对象(并释放存储在其中的每个指向数据库的处理程序)吗?

4

2 回答 2

1

一旦方法调用结束,垃圾收集器不会释放连接对象(并释放存储在其中的每个指向数据库的处理程序)吗?

它没有。JDBC 驱动程序保留对连接的引用,因此除非您可以 close(),否则它不会被清除。

顺便说一句,创建数据库连接非常昂贵,因此您将希望尽可能回收您的连接。

于 2013-09-19T17:00:49.543 回答
0

您相信您是唯一一个引用 Connection 的人。驱动程序可能会跟踪它们,并且不会释放尚未关闭的连接。这就是为什么您总是需要关闭所有更复杂的资源(连接、流等)。

于 2013-09-19T17:00:07.587 回答