0

我对这段代码有疑问:

ResultSet dane = statement.executeQuery("SELECT * FROM ProWarns WHERE blahblah = '" + cel + "'");

while (dane.next()) {
    // some code (only get some string from result)
    if (TimeEnd <= EndTime) {
        statement.executeUpdate(
            "DELETE FROM ProWarns WHERE id = '" + id + "'"); //and error

        statement.executeUpdate(
            "UPDATE ProWarnsPlayers SET num = '" + NewV + "'" WHERE Pl = '"+ tar + "'");
    }
}

错误:java.sql.SQLException:ResultSet 关闭后不允许操作。错误在哪里,我该如何解决?

PS:

我包括我的 DB 类的Pastebin ,以防它有帮助。

4

1 回答 1

1

对象缓存其结果集,因此当Statement您在 for 循环中执行其他操作时,原始结果集会“重置”。当您调用dane.next. 从Javadoc

默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交错,则每个对象都必须由不同的 Statement 对象生成。Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象(如果存在打开的对象)。

选项?使用另一个Statement对象来执行内部查询。

于 2013-04-13T01:59:14.030 回答