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

Sru*_*lla 20 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

Evg*_*eev 17

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

无论如何,总是明确地关闭ResultSet和Statement并且不依赖于Connection.close是一个好习惯.

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

  • 一个写得很好的连接池应该在关闭连接时关闭相关的底层资源(连接本身除外).编写良好的客户端代码不应该依赖于此.在实践中,大多数事情写得很糟糕,并且你的代码出现玫瑰味是很好的做法. (3认同)