4

同じStatementオブジェクトから生成された 2 つのResultSetがあります。

コードサンプルは次のとおりです。

Connection con            = null;
Statement  stmt           = null;
ResultSet rs = null;

con = DBAccess.getConnection();
stmt = con.createStatement();

rs = stmt.executeQuery(Query1);
// operate on the resultset

rs = stmt.executeQuery(Query2);   // Is it legal and do not have side-effects?
// operate on the resultset

// close everythings (Resultset, Statement, Connection)

動作確認しました。私の疑問は、副作用があるかどうかです。

4

3 に答える 3

9

javadocから:

デフォルトでは、Statement オブジェクトごとに 1 つの ResultSet オブジェクトのみを同時に開くことができます。したがって、ある ResultSet オブジェクトの読み取りが別の ResultSet オブジェクトの読み取りとインターリーブされている場合、それぞれが異なる Statement オブジェクトによって生成されている必要があります。Statement インターフェースのすべての実行メソッドは、開いているステートメントの現在の ResultSet オブジェクトが存在する場合、そのオブジェクトを暗黙的に閉じます。

そうですよね、安心してできますよね。2 番目のクエリを実行した後は、最初の結果セットを使用できません。

于 2012-07-18T18:12:21.960 に答える
1

すべてのステートメント オブジェクトに対して、Resultset オブジェクトは 1 つだけ存在します。したがって、別のクエリを実行すると、内部的に既存の結果セット オブジェクトが閉じられ、新しい結果セット オブジェクトが開かれます。ただし、前の結果セット オブジェクトにはアクセスできません。

副作用はありません。好きなように使えます。

于 2012-09-22T09:47:33.290 に答える
0

同じ変数を使用して 2 番目の結果セットを参照する前に、最初の結果セットを閉じることを忘れないでください。2 番目のステートメントの実行後にのみ結果セットを閉じると、2 番目の結果セットは閉じられ、最初の結果セットは閉じられません。

于 2012-09-11T21:17:01.517 に答える