如果我删除 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;
最佳答案
您对 SELECT
和 INSERT
使用相同的 Statement
对象。来自 Javadoc :
A
ResultSet
object is automatically closed when theStatement
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/