2013-05-07 80 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