7

Javadocは.close()PreparedStatementそれが..

このStatementオブジェクトのデータベースとJDBCリソースを、自動的に閉じられたときにこれが発生するのを待つのではなく、すぐに解放します。データベースリソースを拘束しないように、リソースを使い終わったらすぐにリソースを解放することをお勧めします。

すでに閉じられているStatementオブジェクトに対してメソッドcloseを呼び出しても、効果はありません。

注:Statementオブジェクトが閉じられると、現在のResultSetオブジェクト(存在する場合)も閉じられます。

次のシナリオを検討してください

    MyConnector databaseConnector = DBManager.instance().getConnector();

    Connection con = databaseConnector.getConnection(); // returns java.sql.Connection
    PreparedStatement pstmt = null;

    try {
        pstmt = con.prepareStatement("some query");
         ...
    } finally {  
        if (pstmt != null)
            pstmt.close();
    }

この例では、pstmt.close()も閉じconますか?

4

3 に答える 3

13

a を閉じても aは閉じStatement ませんConnection。ただし、 a を閉じると、 aConnection 閉じますStatement

次のように考えてください。

  • 接続 -> 作成して自動的に閉じる -> ステートメント
  • ステートメント -> 作成して自動的に閉じる -> ResultSet

したがって、 a を閉じると、すべてのおよびそれに含まConnectionれる が自動的に閉じられます。StatementResultSet

ただし、可能であれば、3 つすべてを手動で閉じる (ResultSetその後に をStatement続けるConnection) ことをお勧めします。

于 2012-05-09T22:00:29.793 に答える
2

注: Statementオブジェクトが閉じられると、その現在のResultSet [ただし Connection ではない] オブジェクトが存在する場合は、それも閉じられます。

接続を閉じることはなく、結果セット オブジェクトを閉じるだけです。

于 2012-05-09T22:00:45.980 に答える
0

Java 7 を使用していて、接続や または のいずれかtry-with-resourcesを閉じることを心配する必要がない場合。StatementResultSet

try (Connection conn = databaseConnector.getConnection();
     PreparedStatement pstmt = conn.prepareStatement("some query")) {
    ...
} catch (Exception e) {
    ...
}
于 2012-05-09T22:07:52.917 に答える