1

結果セットが閉じられると、ステートメントはどうなりますか?

    Statement stmt = null;
    ResultSet rs = null;

    try {
        stmt = con.createStatement();
        rs = stmt.executeQuery(query.toString());
        ...
    }

    // lots of code

    rs.close()

注:ResultSetオブジェクトは、Statementオブジェクトが閉じられるか、再実行されるか、複数の結果のシーケンスから次の結果を取得するために使用されるときに、それを生成したStatementオブジェクトによって自動的に閉じられます。

しかし、ResultSetが最初に閉じられるとどうなりますか?

どういうわけか、最初に何が起こるべきですか?

4

3 に答える 3

6

オブジェクトを作成したときと逆の順序でオブジェクトを閉じる必要があります。最初にResultSet、次に 、Statement最後にConnection.

を閉じないと、Statement開いたままになり、それを使用して別のクエリを実行できます (それが であるPreparedStatementか、CallableStatementクエリ パラメータを変更できる場合)。

また、引用したのはJDBC仕様であり、その実装はJDBCドライバープロバイダー次第であることに注意してください。通常、それらを信頼せず、手動でこれらのオブジェクトを閉じてください。

もう1つのこと-もっと重要だと思います-接続プール(JBossなど)を使用している場合、接続を閉じると接続が解放されてプールに戻り、基礎となるオブジェクトは解放されません。このため、作成したすべてのオブジェクトを常に手動で解放することをお勧めします。

于 2012-06-06T22:18:48.567 に答える
2

Statement実は再利用できます。ただし、同じクエリを繰り返す場合はPreparedStatement、クエリが 1 回コンパイルされるため、代わりに a を使用する必要があります。

もちろん、使い終わったら閉じる必要がありますが、 を閉じても、正当な理由で がResultSet自動的に閉じられるわけではありません。Statement

于 2012-06-06T22:22:06.643 に答える
1

ステートメントには何も起こりません。ステートメントは開いたままです。ステートメントは引き続き使用できますが、使い終わったら必ず閉じてください。

于 2012-06-06T22:21:52.333 に答える