Java 在哪些情况下,SQL语句对象会自动关闭?

Java 在哪些情况下,SQL语句对象会自动关闭?,java,sql,jdbc,Java,Sql,Jdbc,我的问题是关于这项声明: 立即释放此语句对象的数据库和JDBC资源,而不是等待它自动关闭时发生这种情况。 那么,在什么情况下语句对象会自动关闭?当创建它的连接关闭时,它会关闭 您可以使用try with resources语句自动关闭 java.sql.Connection、java.sql.Statement和java.sql.ResultSet 对象,而不管是SQLException还是任何其他异常 已被抛出。try with resources语句由try组成 语句和一个或多个声明的资源

我的问题是关于这项声明:

立即释放此语句对象的数据库和JDBC资源,而不是等待它自动关闭时发生这种情况。


那么,在什么情况下语句对象会自动关闭?

当创建它的连接关闭时,它会关闭

您可以使用try with resources语句自动关闭 java.sql.Connection、java.sql.Statement和java.sql.ResultSet 对象,而不管是SQLException还是任何其他异常 已被抛出。try with resources语句由try组成 语句和一个或多个声明的资源(由 分号)。资料来源:

以下语句是一个try with resources语句,它声明了一个资源stmt,该资源将在try块终止时自动关闭:

try (Statement stmt = con.createStatement()) {

  // ...

}

如果您关心的是确保关闭连接、资源等,那么我只需要使用SpringJDBC。它只增加了很少的开销,很容易实现,并且将使您摆脱那些繁琐的try-catch-finally结构,只用于进行简单的查询。

对于JDBC 4.0及更早版本(Java 6及更早版本):

  • 连接关闭时,语句将关闭
JDBC 4.1(Java 7)添加了以下内容:

  • 如果调用了
    closeOnCompletion()
    ,并且 从该语句创建的
    ResultSet
    已被读取到最后一行之外(该读取发生在启用closeOnCompletion之后)

<>我不认为“尝试使用资源”会自动关闭连接,但只是“语法糖”<代码>尝试…最后

确保在不再需要任何语句(或结果集)时立即关闭它们。不要依赖于任何隐含的清理这些东西。