我有点困惑。我正在从 _Java Database Connectivity_ 阅读以下内容:
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
连接吗?如果 conn.close() 没有发生,到底发生了什么?
我有一个我正在维护的私有 Web 应用程序,它目前没有关闭任何一种形式,但重要的是真正的 stmt
一个, conn
一个,还是两者?
该站点不断间歇性地关闭,但服务器一直说这是数据库连接问题。我怀疑它没有被关闭,但我不知道要关闭哪个(如果有的话)。
原文由 onaclov2000 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您使用
Connection
后,您需要通过调用其close()
方法显式关闭它,以便释放任何其他数据库资源(游标、句柄等)连接可能会坚持下去。Actually, the safe pattern in Java is to close your
ResultSet
,Statement
, andConnection
(in that order) in afinally
block当你完成它们时。是这样的:finally
块可以稍微改进为(以避免空检查):但是,这仍然非常冗长,因此您通常最终会使用辅助类来关闭空安全辅助方法中的对象,并且
finally
块变成如下所示:而且,实际上, Apache Commons DbUtils 有一个
DbUtils
类,它正是这样做的,所以没有必要编写你自己的。