2013-07-15 78 views
0

所以我一直在尋找這個問題,並且當語句試圖獲取多個ResultSets時,問題就出現了。爲什麼我得到java.sql.SQLException:在ResultSet關閉後不允許操作

但在下面的代碼中,我得到了異常,即使executeUpdate只是返回一個int。

ResultSet resultsRS = statement.executeQuery("select distinct snum from shipments where quantity >= 100"); 
int rowCount=0; 

while(resultsRS.next()){ 
    statement.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"\""+resultsRS.getString(1)+"\""); 
    rowCount++; 
} 

它運行一次很好,之後它給出了例外。 我該如何解決這個問題?

+0

似乎有更多的代碼參與。錯誤表示resultRS在您嘗試從中讀取時已關閉。 – Thilo

+0

解決這個問題,我建議在單個查詢中進行此操作。 – Nuoji

回答

2

Statement接口中的所有執行方法都隱式地關閉了一個statment的當前ResultSet。 See docs因此,您需要將resultSet數據存儲在臨時數組中並循環。

或嘗試使用另一個語句作爲executeUpdate。

嘗試這樣:

ArrayList<String> tmp = new ArrayList<String>(); 
    while(resultsRS.next()){ 
     tmp.add(resultsRS.getString(1)); 
    } 

    for (String s: tmp) { 
     statement.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"\""+s+"\""); 
     rowCount++; 
    } 
+0

你介意給我看代碼嗎? –

+1

@KelseyAbreu最簡單的方法是爲更新創建新的語句。所以你有像'statement2.executeUpdate(「更新供應商SET狀態=狀態+ 5 WHERE snum =」+「\」「+ resultsRS.getString(1)+」\「」)' – Nuoji

+0

是的,謝謝你們。我現在就是這麼做的。 大幫忙! –

相關問題