2013-07-15 52 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

是的,谢谢你们。我现在就是这么做的。 大帮忙! –

相关问题