关闭Connection会自动关闭语句和结果集吗?

时间:2012-12-24 17:52:07

标签: java database database-connection prepared-statement

我知道Java中的安全模式是在finally块中按顺序关闭ResultSet,Statement和Connection。

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

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

更新:
我正在使用DatabaseProductVersion:Oracle Database 11g 11.1.0.0.0版 DriverName:Oracle JDBC驱动程序
DriverVersion:10.2.0.4.0

2 个答案:

答案 0 :(得分:17)

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

在任何情况下,始终明确关闭ResultSet和Statement并且不依赖于Connection.close是一个好习惯。

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

答案 1 :(得分:3)

细节最终归结为每个JDBC驱动程序实现;但是,一旦与数据库的连接关闭,与其相关的所有内容都将放置在数据库端,因此客户端无法做任何事情,只能自动关闭代表这些资源的对象。

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