为什么我得到java.sql.SQLException:ResultSet关闭后不允许操作

时间:2013-07-15 08:06:44

标签: resultset 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++;  
}

它运行一次,之后它给出了异常。 我怎么能解决这个问题?

1 个答案:

答案 0 :(得分: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++;
    }