java - 为什么 rs.next() 不转到另一条记录

标签 java sqlite resultset

如果我删除 beforeFirst(),我的函数只会在 ResultSet 中执行第一个记录,然后结束。如果我使用 beforeFirst(),我会收到错误 ResultSet IS_TYPE_FORWARD_ONLY

try {
    ResultSet rs = stat.executeQuery("select _id, godziny_id from tblZmiany where harmonogram_id = " + h_id + " order by pracownik_id, Dzien");
    rs.beforeFirst();
    while (rs.next()) {
        if (stat.executeUpdate("insert into tblWykonanie (Zmiana_id, Godziny_id) values ('" + rs.getLong(1) + "', " + rs.getInt(2) + ");") < 1) {
            // Jeśli insert nie wstawił kolejnego rekordu
            error_code = "Wystąpił problem podczas zatwierdzania harmonogramu.";
            return false;
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
    return false;
} catch (Exception e) {
    error_code = e.getMessage();
    return false;
}

return true;

最佳答案

您对 SELECTINSERT 使用相同的 Statement 对象。来自 Javadoc :

A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.

要解决此问题,请为 executeUpdate() 调用使用单独的 Statement 对象。

另外,我强烈建议您更改代码以使用 PreparedStatement带有绑定(bind)参数(由 ? 表示)。像您现在所做的那样一点一点地构建 SQL 语句可能会打开 security vulnerabilities .

关于java - 为什么 rs.next() 不转到另一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589777/

相关文章:

java - 每秒安排一次 Get Api 调用与执行订阅者 API 之间有什么区别?

java - Hibernate 因在 ManyToMany 关联上将完全限定的类名添加到属性名而失败

java - Selenium 测试 ant 关键事件

sqlite - 在线测试 SQLite 代码

Android adb shell删除sqlite数据库

java - 结果集存储到带有单元渲染的表的字符串数组中

Javafx 使用 tableview 更新数据库

mysql - Python 3.4 - 如何将 Pandas 数据面板(非框架)转换为 mySQL 数据库?

java - 结果集被重用

java - 为什么 IS_AUTOINCREMENT 元数据列根据 MS SQL Server 的类型返回不一致的值?