2011-08-31 56 views
3

我正在運行代碼,但是得到「無效狀態,ResultSet對象已關閉」。錯誤。什麼導致了錯誤?無效狀態,結果集對象關閉

try{ 
    query = "SELECT * FROM BUNDLE_TEMP " 
        + "MINUS " 
        + "SELECT * FROM BUNDLE"; 

      rs = stmt.executeQuery(query); 

      while (rs.next()){ 
       String bundle = rs.getString("BUNDLE"); 
       String week = rs.getString("WEEK"); 
       String sched_dt = rs.getString("SCHED_DT").replace(" 00:00:00.0", ""); 
       String dropper_id = rs.getString("DROPPER_ID"); 


       query = "INSERT INTO BUNDLE " 
          + "VALUES ('" 
           + bundle+"','" 
           + week+"','" 
           + sched_dt+"','" 
           + dropper_id+"')"; 

       stmt.executeUpdate(query); 
      } 
     }catch(Exception e){ 
      System.out.println("Error while trying to insert into BUNDLE\n"+query+"\n"+ e); 
     } 
+3

請在您的問題中發佈異常堆棧跟蹤,它包含有價值的信息來診斷您的問題。 –

+0

Philipp是對的。我認爲你甚至可能發生網絡中斷,從而導致兩個查詢之間的連接中斷,並且問題可能會導致您向我們顯示的相同信息。 – Kheldar

回答

6

你不能在同一Statement執行另一個SQL查詢您當前迭代與ResultSet。這樣做會關閉先前打開的遊標(您SELECT查詢RESP ResultSet):

引述API docs for Statement

默認情況下,每個Statement對象只有一個ResultSet對象可以是開放 在同一時間。因此,如果一個ResultSet對象的讀數是 與另一個ResultSet對象的讀數交錯,則每個必須由不同的Statement對象生成 。如果 已打開,則語句 接口中的所有執行方法隱式關閉語句的當前ResultSet對象。

Connection創建另一個Statement例如,讓我們把它叫做updateStmtexecuteUpdate()在那一個。

此外,請查看Prepared Statements進行更新,它可能會更具性能和安全性。

相關問題