在ResultSet上进行迭代时,JDBC异常“在ResultSet关闭后不允许操作”

时间:2013-04-13 01:52:43

标签: java mysql sqlite resultset bukkit

我对此代码有疑问:

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:

我包含了Pastebin我的数据库类,以防它有用。

1 个答案:

答案 0 :(得分:1)

Statement对象缓存其结果集,因此当您在for循环中执行其他操作时,原始结果集将“重置”。当您致电dane.next时,会导致发生错误。来自Javadoc

  

默认情况下,每个Statement对象只能打开一个ResultSet对象   同时。因此,如果读取一个ResultSet对象是   与另一个的读取交错,每个必须已经生成   通过不同的Statement对象。 Statement中的所有执行方法   如果是,接口隐式关闭一个statment的当前ResultSet对象   打开一个。

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