1

前の Execute query result While ループを使用してクエリを実行する方法。

Resultset rs = con.excuteQuery(Query1.toString);
While(rs.next()){
  Resultset rs1 = con.excuteQuery(Query2.toString);
  while(rs1.next()){
  }
}

2 番目のクエリが実行されると、前の rs は実行できなくなります。例: 2 番目のクエリが実行され、1 番目のクエリが 2 番目のレコードをフェッチしなかった場合、1 番目のクエリには 2 つのレコードがあります。

できるだけ早く解決策を教えてください。

ありがとう。

4

2 に答える 2

0

コメントで述べたように、2 つのクエリが関連している場合は、内部結合を使用してそれらを 1 つにマージする必要があります。それ以外の場合、オプションはデータベースやドライバーによって異なります。

1) 2 つの異なる接続を使用してクエリを実行する

または:

2) [ドライバーで許可されている場合] 接続で直接クエリを実行する代わりに、2 つの PreparedStatement を使用します。

よほどの理由がない限り、準備済みステートメントを使用する習慣を身につけることをお勧めします。接続を介して直接クエリを実行するだけでなく、あらゆる種類の利点があります。

于 2012-06-22T09:33:37.177 に答える
0

おそらくあなたの例conにはステートメントがあります。javadocsの状態:

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

したがって、2 つの別個のステートメントが必要です。

編集: @ABCade と前の回答に同意しますが、セットで考え、データベースに結合させて、単一の結果セットを取得する必要があります。現在、最初の結果セットのデータを使用して作業を行っている場合、たとえば、1 つまたは複数の列で最後に表示された値を追跡するなどして、そのデータを以前に表示したことがあるかどうかを追跡する必要があります。

于 2012-06-22T07:10:10.887 に答える