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


问题内容

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

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

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

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


问题答案:

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

无论如何,总是始终显式关闭ResultSet和Statement而不依赖于Connection.close是一个好习惯。

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