2013-05-07 45 views
3

我試圖在結果集循環中創建一個查詢,但我不斷收到錯誤「結果集開始之前」。我嘗試了許多不同的方法,但他們不斷提出相同的錯誤。java.sql.SQLException:在結果集開始之前。 Result set循環內的查詢如何?

有人可以幫我嗎?

String insertSQL = "INSERT INTO MonthlyReportTable VALUES(NULL,"; //Primary Key. 

String PlannetSchemeCode = ""; 
int ResponcibleAuthorityID = 0; 

Statement stmt = ConnectionDetails.getNewConnectionPPARSDB().createStatement(); 
ResultSet resultsSet = stmt.executeQuery("SELECT * FROM planning_scheme"); 

Statement insideStatement = ConnectionDetails.getNewConnectionPPARSDB().createStatement(); 

//Loop though each planning scheme and create the data for each field. 
while (resultsSet.next()) 
{ 
    PlannetSchemeCode = "'" + resultsSet.getString("ps_code") + "'"; 

    //Planning Scheme Primary Key 
    insertSQL += PlannetSchemeCode + ","; 

    /* 
    //Responsible Authority ID 
    insertSQL += "'" + String.valueOf(
      ResponcibleAuthorityID = MySQLUtil.getResults(
       ConnectionDetails.Database_Connection_PPARSDB, 
       "SELECT resp_authority_id " + 
       "FROM resp_authority_to_ps " + 
       "WHERE ps_code = " + PlannetSchemeCode 
      ) 
      .getInt("resp_authority_id") 
     ) + "'"; 
    */ 

    ResultSet insideResultsSet = 
      insideStatement.executeQuery(
       "SELECT resp_authority_id " + 
       "FROM resp_authority_to_ps " + 
       "WHERE ps_code = " + PlannetSchemeCode 
      ); 

    //ERROR HERE, some reason results set is getting set wrong?? 
    //Error here, this current results set is resetting the Results set. 
    ResponcibleAuthorityID = insideResultsSet.getInt("resp_authority_id"); 

    //Total_Received_CM 

    //Add the rest of the values temporary. 
    int FeildsAdded = 3; 
    for(int i = 1 + FeildsAdded; i < 458; i++) 
    { 
     insertSQL += String.valueOf(0) + ","; 
    } 

    //Insert date and end SQL string. 
    insertSQL += "NOW()"; 
    insertSQL += ")"; 

    System.out.println(insertSQL); 

    //Do Insert in PPARS. 
    //stmt.executeQuery(insertSQL); 
    //Reset the SQL String for the new Row. 
    insertSQL = "INSERT INTO MonthlyReportTable VALUES(NULL,"; 
} 

回答

8

ResultSet光標最初位於第一行之前;對方法next的第一次調用使第一行成爲當前行;第二次調用使第二行成爲當前行,依此類推。

您需要先致電ResultSet#next(),然後才能讀取返回的數據。

ResultSet insideResultsSet = insideStatement.executeQuery(
    "SELECT resp_authority_id " + 
    "FROM resp_authority_to_ps " + 
    "WHERE ps_code = " + PlannetSchemeCode 
); 

if (insideResultsSet.next()) { 
    ResponcibleAuthorityID = insideResultsSet.getInt("resp_authority_id"); 

    // etc... 
} 
+0

謝謝,這有助於很多。 (實際上是因爲結果集沒有返回任何數據,但你的問題幫助我找到了答案)。 – 2013-05-07 21:47:03

相關問題