2017-05-17 3 views
0

私はSQLite DBを照会するためにJavaプログラムを使用しています。私は現在、開発テストの状態にあり、特定の選択クエリをテストしたいと考えています。私はすべての私のDBコマンド(プロデューサ)と結果セットを処理する消費者スレッドを発行するために呼び出すスレッドがあります。たDbCommandスレッド(プロデューサー)だけの結果セットを取得し、共有キューに入れ、そのような接続を閉じ、それを、DB接続を開く新しいクエリを作成し、発行します:ResultSetが既に要求されています

String url = "jdbc:sqlite:" + Configuration.getInstance().getDbPath(); 
     // create a connection to the database 
     conn = DriverManager.getConnection(url); 

try 
     { 
      if (conn.isValid(DB_TIMEOUT)) 
      { 
       Statement stmt; 
       try 
       { 
        errorLog.info("Query Issued to Database: " + query); 
        stmt = conn.createStatement(); 
        stmt.execute(query); 
        ResultSet rs = stmt.getResultSet(); 
        if (rs != null) 
        { 
         try 
         { 
          TrendApp.resultSetProcQueue.put(new QueryResult(request, stmt.getResultSet())); 
         } catch (InterruptedException e) 
         { 
          errorLog.error("Failed to capture result set from query: " + e); 
         } 

        } else 
        { 
         try 
         { 
          TrendApp.resultSetProcQueue.put(new QueryResult(request, null)); 
         } catch (InterruptedException e) 
         { 
          errorLog.error("Failed to capture result set from query: " + e); 
         } 
         errorLog.info(stmt.getUpdateCount() + " rows updated."); 
        } 

       } catch (SQLException e) 
       { 
        errorLog.error("Failed to issue database command: " + e); 
       } 

      } 
     } catch (SQLException e) 
     { 
      errorLog.error("Database connection is not valid."); 
     } 

     closeDB(); 
    } else 
    { 
     errorLog.info("Database query is empty. No action performed."); 
    } 

} 

マインドあなたがポイントこのプログラムの目的は、既に存在するより大きなテーブルセットから要素を取り出し、簡単なアクセスのために作成した新しいテーブルにサブセットを追加することです。だから私は新しいテーブルを照会するとき、私はエラー "ResultSetが既に要求"を取得します。コンシューマ側では、現在のところ、まだ結果セットの処理はありません(まだコードは書かれていません)。このエラーはプログラムの再起動時にも発生します。私の新しいテーブルへの最初のクエリ以来、それは働いていません。

[INFO] 2017年5月17日9時27分41秒[プール-2-スレッド-4] DBExtend - データベースに発行したクエリ:TrendPredef1111は異なるタイムスタンプ、machineId、IOTYPE、IOID、サブフィールド、値を選択WHERE machineId = 1111とIOTYPE = 2、IOID = "25" およびタイムスタンプ< = 1495027659000000000とタイムスタンプ> = 1494943059000000000

[ERROR] 2017年5月17日9時27分41秒[プール-2-スレッド-4] DBExtend - データベースコマンドを発行できませんでした:java.sql.SQLException:ResultSetが既に要求されています

私は間違って何をしていますか?

+4

'stmt.getResultSet()'を2回呼び出していますが、これは禁止されています。 – Berger

答えて

2

結果セットのリクエストが2回あります。

最初に、Resultsetオブジェクトを作成します。

2番目に、QueryResultオブジェクトを作成しています。

代わりに "rs"オブジェクトを渡します。

+0

ありがとう!!!!!! – Tacitus86

+0

編集 – Shuddh

+0

を参照してくださいねえ、編集する前に変更を加えました。それにもかかわらず、私は明確化を感謝します。 – Tacitus86

関連する問題