2011-07-11 14 views
0

クエリ結果を使用して別のクエリを生成し、新しいクエリを実行しようとしていますが、動作していないようです。 2番目のクエリは実行されていません。誰か私に教えてもらえますか?これがコードの一部です。JavaがresultSetからクエリを生成し、新しいクエリを実行する

Statment stmt = connnection.createStatement(); 
Statment stmt2 = connnection.createStatement(); 
ResultSet r = stmt.executeQuery("Select * from employees"); 
while (r.next()) { 
      String Str = "Select name from employees where employeeId = " + (r.getInt(3) + 1); 
      System.out.println(str); 
      query = stmt2.executeQuery(str); 
      System.out.println(query.getString(1));} 

正しいクエリが生成されたようですが、実行されません。これがそうである理由がありますか。 BTWの "query"は結果セットとして宣言されます。 ありがとう

+0

おそらくこれは単純なサンプルコードに過ぎませんが、このN + 1クエリを単一のクエリに書き換えて、必要なすべてのデータを取得することもできます。 –

+0

どういう意味ですか? – jpo

+1

employeeid = this.id + 1の名前を取得するために、すべての従業員の行を選択し、それぞれの問合せを実行する必要はありますか?これを単一のクエリーに書き直すことができます。たとえば、「従業員e1の従業員e1の従業員e2の従業員e2の従業員e2.employeeid = e1.employeeid + 1」 –

答えて

2

1つのデータベース接続に対して別のデータベース接続を開き、2番目の接続を2番目の接続で実行するか、最初の文から結果セットを繰り返し実行することができますそのステートメントを閉じて、2番目のものを実行します。

+0

ありがとうございます。 Resultset rが現在のクラスにパラメータとして渡された場合はどうなりますか?つまり、以前のクラスでステートメントが実行され、このクラスでは、そのクエリの結果を使用して別のクエリを生成して実行するだけですか?私は両方のクラスで接続を確立しましたが、それでも動作しません。助けてください – jpo

+1

それは結果セットを渡すために良いデザインではありません!しかし、誰かがクラスをそのように実装し、あなたがそれを制御できないと仮定すると、データを反復処理することによって '(id1、id2、id3 ...) 'のようなIDのセットを構築する解決策を提案するでしょう結果セットでは、 'select * from employees where id in ' – Liv

+0

のような別のクエリでこの文字列を使うことができます。なぜ結果セットをパラメータとして渡せませんか?それを試してみてください。ありがとう – jpo

関連する問題