关闭连接是否会自动关闭语句和结果集?

我知道Java中的安全模式是按最终块的顺序关闭结果集,语句和连接。

如果关闭连接,然后尝试关闭语句(不引发异常)。但是,如果您尝试从语句调用任何方法,则会引发异常。

我想知道关闭连接是否会自动关闭从该连接创建的所有语句对象?

更新:
我正在使用数据库产品版本: Oracle 数据库 11g 发行版 11.1.0.0.0
驱动程序名称: Oracle JDBC 驱动程序
驱动程序版本: 10.2.0.4.0


答案 1

是的,Connection.close API说“立即释放此连接对象的数据库和JDBC资源,而不是等待它们自动释放”。问题在于,应用程序通常使用数据库连接池,而这些连接池可能只是在 Connection.close 上返回“连接到池”。

在任何情况下,最好始终显式关闭 ResultSet 和 Statement,而不依赖于 Connection.close。

此外,直接使用JDBC并不是最好的主意。你可以改用Spring JDBC,而忘记了释放资源的问题。


答案 2

细节最终归结为每个JDBC驱动程序的实现;但是,一旦关闭了与数据库的连接,与它相关的所有内容都将在数据库端释放,因此客户端除了自动关闭表示这些资源的对象之外,无能为力。

您永远不知道数据轮床/驱动程序可能以何种方式被破坏(例如,可能存在资源泄漏),因此最佳实践建议是显式关闭所有内容。


推荐