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

Java 关闭连接是否会自动关闭语句和结果集?,java,database,database-connection,prepared-statement,Java,Database,Database Connection,Prepared Statement,我知道Java中的安全模式是在finally块中按顺序关闭结果集、语句和连接 若您关闭连接,然后尝试关闭语句(不引发异常)。但若您试图从语句调用任何方法,则会引发异常 我想知道关闭连接是否会自动关闭由该连接创建的所有语句对象 更新: 我正在使用DatabaseProductVersion:Oracle Database 11g 11.1.0.0.0版 DriverName:Oracle JDBC驱动程序 DriverVersion:10.2.0.4.0详细信息最终取决于每个JDBC驱动程序实现;

我知道Java中的安全模式是在finally块中按顺序关闭结果集、语句和连接

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

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

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

DriverVersion:10.2.0.4.0

详细信息最终取决于每个JDBC驱动程序实现;但是,一旦关闭了与数据库的连接,与之相关的所有内容都将在数据库端进行处理,因此客户端除了自动关闭表示这些资源的对象之外,没有什么可做的


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

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

在任何情况下,总是显式关闭ResultSet和语句,而不依赖Connection.close都是一种好的做法


此外,直接使用JDBC不是最好的方法。您可以使用Spring JDBC,而不用考虑释放资源的问题。

编写良好的连接池应该关闭相关的底层资源(连接本身除外)当连接关闭时。写得好的客户端代码不应该依赖于此。实际上,大多数东西都写得不好,你的代码散发出玫瑰的味道是一种很好的做法。对。我决定用Apache的BasicDataSource测试它:我打开了conn,创建了stmt,关闭了conn并运行了查询。得到SQLException“com.mysql.jdbc。StatementImpl@1095a1“已关闭。”“直接使用JDBC不是最好的主意”。为什么不呢?Spring在某些情况下可能有用,但在另一些情况下只会产生不必要的开销。由于Spring的建议而投反对票,与问题无关。