私の質問はこの声明に関するものです:
この Statement オブジェクトのデータベースと JDBC リソースを、自動的に閉じられるのを待つのではなく、ただちに解放します。 http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close%28%29
では、Statement オブジェクトが自動的に閉じられるのはどのような場合でしょうか?
私の質問はこの声明に関するものです:
この Statement オブジェクトのデータベースと JDBC リソースを、自動的に閉じられるのを待つのではなく、ただちに解放します。 http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close%28%29
では、Statement オブジェクトが自動的に閉じられるのはどのような場合でしょうか?
For JDBC 4.0 and earlier (Java 6 and earlier):
JDBC 4.1 (Java 7) adds the following:
closeOnCompletion()
has been called and
the ResultSet
created from that statement has been read beyond the last row (and that read happened after enabling closeOnCompletion)I don't consider 'try-with-resources' to be automatically closing the connection, but 'just' syntactic sugar for try ... finally
.
SQLException またはその他の例外がスローされたかどうかに関係なく、try-with-resources ステートメントを使用して、java.sql.Connection、java.sql.Statement、および java.sql.ResultSet オブジェクトを自動的に閉じることができます。try-with-resources ステートメントは、try ステートメントと 1 つ以上の宣言されたリソース (セミコロンで区切られている) で構成されます。出典: try-with-resources ステートメントを使用して JDBC リソースを自動的に閉じる
次のステートメントは、1 つのリソース stmt を宣言する try-with-resources ステートメントです。これは自動的に閉じられ、try ブロックが終了します。
try (Statement stmt = con.createStatement()) {
// ...
}
それを作成した接続が閉じられると、閉じられます。
接続やリソースなどを確実に閉じることに関する懸念がある場合は、単純にSpring JDBCを使用します。オーバーヘッドがほとんどなく、実装が非常に簡単で、単純なクエリを作成するためだけに、面倒な try-catch-finally 構造を取り除くことができます。