Resultset.next 返回 true,但不返回值



我正在尝试从mysql表中读取,我正在执行以下操作:

protected void pushRegisteredStudentsData() {
    try {
        conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS);
        stmt = conn.createStatement();
        String userID = "SELECT * FROM STUDENT";
        rs = stmt.executeQuery(userID);
        while (rs.next()) {
            int id = rs.getInt("ID");
            this.studentID = id;
            String insertSql = "INSERT INTO REGISTEREDSTUDENTS(StudentID, ModuleCode) VALUES ('" + studentID + "', + '"
                    + this.moduleCode + "')";
            System.out.println("Inserting into REGISTEREDSTUDENTS.. [" + id + "]" + "[" + this.moduleCode + "]");
            stmt.executeUpdate(insertSql);
        }
    } catch (SQLException e) {
    }
}

但由于某种原因,

while (rs.next()) {
    int id = rs.getInt("ID");

始终返回相同的ID,即使表的每一行都有不同的ID!

有人知道为什么会这样吗?提前感谢!:(

编辑:我用一条语句执行了两次更新,这就是问题的根源!

它总是返回相同的值,这有点奇怪,因为它应该只返回第一个值一次。

如果你打印stacktrace,而不是仅仅捕捉异常而什么都不做,你会看到它会打印类似于:

java.sql.SQLException: Operation not allowed after ResultSet closed
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:794)

您对Select使用THE SAME语句,然后对Insert使用THE SAME语句。这会导致"附加"到语句的resultSet关闭,因为不应该再次使用它。

它可以通过创建另一个语句来轻松修复:

        String insertSql = "INSERT INTO REGISTEREDSTUDENTS(StudentID, ModuleCode) VALUES ('" + studentID + "', + '"
                + this.moduleCode + "')";
        System.out.println("Inserting into REGISTEREDSTUDENTS.. [" + id + "]" + "[" + this.moduleCode + "]");
        Statement stmt2 = conn.createStatement();
        stmt2.executeUpdate(insertSql);

相关内容

  • 没有找到相关文章

最新更新