3

次のコード スニペットを検討してください。

public void getUsers() {
    CachedRowSet rowSet = new CachedRowSetImpl();
    .........     /* Initialize the rowset */
    String query = "SELECT user_id FROM users";
    rowSet.setCommand(query);
    rowSet.execute();
    .........    /* Do some job */

}

ここで、CachedRowSetオブジェクトはメソッドでローカルに使用されます。ここで手動で閉じる必要がありますか?それとも、メソッドが終了したときに保持するコンテンツが自動的に収集されますか?

4

1 に答える 1

3

から: http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/CachedRowSet.html

CachedRowSet オブジェクトは切断された行セットです。つまり、データ ソースへの接続を短時間しか使用しません。データを読み取って行を設定している間にデータ ソースに接続し、基になるデータ ソースに変更を反映している間に再度接続します。残りの時間は、データが変更されている間も含めて、CachedRowSet オブジェクトは切断されます。切断されていると、RowSet オブジェクトがよりスリムになるため、別のコンポーネントに渡すのがはるかに簡単になります。たとえば、切断された RowSet オブジェクトをシリアライズして、ネットワーク経由で携帯情報端末 (PDA) などのシン クライアントに渡すことができます。

つまり、閉じる必要のある接続の問題がないため、そのままにしておくことができます

しかし、開いたものを常に閉じて、通常は触れたり、いつ実行するかを指示したりしないGCに任せないことをお勧めします。

多くのリクエストを持つ十分な大きさのサーバーが与えられた場合、それによってファイル記述子が開かれると、最終的に問題になる可能性があります。リソースが閉じていることを確認することが常に最善です

于 2012-09-05T10:57:03.190 に答える