2013-01-18 37 views
0

我有以下例外: enter image description hereJava異常:不允許操作結果集關閉後

這裏是有關代碼部分: Server.Proxy.update_allLogOut:(線65的同時,托架)

public void update_allLogOut() 
{ 
    try 
    { 
     ResultSet rs; 
     stmt = conn.createStatement(); 
     rs = stmt.executeQuery("SELECT * FROM sysuser WHERE login=1"); 
     while(rs.next()) 
     { 
      stmt.executeUpdate("UPDATE sysuser SET login=0"); 
     } 
     rs.close(); 
    } catch (SQLException e) {e.printStackTrace();} 

} 

Server.Server:

 public Server(int port) 
{ 
    super(port); 
    func.update_allLogOut(); 
    } 

主:

Server sv = new Server(5555); 

我必須指出,99%的次數運行,沒有例外..但幾次我得到這個例外,我不知道爲什麼會發生。有任何想法嗎?很顯然,事情是做錯了這裏卻所有類似的話題一直沒有放棄在這種情況下,答案...

+0

update_allLogOut方法中的第65行是什麼? – PermGenError

+0

{while while循環 –

+0

@ronnack你是什麼意思? – Andremoniy

回答

3

您正在使用stmt到兩個疊代的SELECT結果,並UPDATE在循環中。從執行UPDATE之時起,這不起作用,與SELECT關聯的結果集關閉。

要修復,請使用兩個單獨的Statement對象。

1

我不知道,這個塊:

stmt = conn.createStatement(); 
    rs = stmt.executeQuery("SELECT * FROM sysuser WHERE login=1"); 
    while(rs.next()) 
    { 
     stmt.executeUpdate("UPDATE sysuser SET login=0"); 
    } 
    rs.close(); 

是一個好主意。 爲什麼不直接執行簡單查詢:UPDATE sysuser SET login=0 WHERE login=1

此外,在while循環內使用相同的stmt - 這是粗略的錯誤。

+0

好主意!!!謝謝! –

相關問題