3

私の質問はこの声明に関するものです:

この Statement オブジェクトのデータベースと JDBC リソースを、自動的に閉じられるのを待つのではなく、ただちに解放します。 http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close%28%29

では、Statement オブジェクトが自動的に閉じられるのはどのような場合でしょうか?

4

4 に答える 4

4

For JDBC 4.0 and earlier (Java 6 and earlier):

  • A Statement is closed when the connection is closed

JDBC 4.1 (Java 7) adds the following:

  • A statement is closed if 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.

于 2012-05-17T08:45:09.253 に答える
2

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()) {

  // ...

}
于 2012-05-17T05:44:35.203 に答える
1

それを作成した接続が閉じられると、閉じられます。

于 2012-05-17T05:41:24.040 に答える
1

接続やリソースなどを確実に閉じることに関する懸念がある場合は、単純にSpring JDBCを使用します。オーバーヘッドがほとんどなく、実装が非常に簡単で、単純なクエリを作成するためだけに、面倒な try-catch-finally 構造を取り除くことができます。

于 2012-05-17T05:47:19.400 に答える