在哪种情况下SQL Statement对象自动关闭?

时间:2012-05-17 05:35:03

标签: java sql jdbc

我的问题是关于这个陈述:

  

立即释放此Statement对象的数据库和JDBC资源,而不是等待它自动关闭时发生。      http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close%28%29

那么,在哪种情况下Statement对象会自动关闭?

4 个答案:

答案 0 :(得分:4)

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

  • 关闭连接时关闭语句

JDBC 4.1(Java 7)添加了以下内容:

  • 如果调用了closeOnCompletion(),则会关闭一个语句 从该语句创建的ResultSet已被读取超出最后一行(并且在启用closeOnCompletion后读取发生

我不认为'try-with-resources'会自动关闭连接,而只是try ... finally的“只是”语法糖。

答案 1 :(得分:2)

  

您可以使用try-with-resources语句自动关闭   java.sql.Connection,java.sql.Statement和java.sql.ResultSet   对象,无论是SQLException还是任何其他异常   已被抛出。 try-with-resources语句包含一个try   声明和一个或多个声明的资源(由...分隔   分号)。资料来源:Using try-with-resources Statements to Automatically Close JDBC Resources

以下语句是一个try-with-resources语句,它声明一个资源stmt,它将自动关闭,然后try块终止:

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

  // ...

}

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果您关心的是确定关闭连接,资源等,我只需使用spring jdbc。它增加了很少的开销,它很容易实现,并且会让你摆脱那些繁琐的try-catch-finally结构,只是为了进行简单的查询。