gpt4 book ai didi

java - Resultset.next 返回 true 但不返回值

转载 作者:行者123 更新时间:2023-11-29 01:38:07 24 4
gpt4 key购买 nike

我正在尝试从 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!

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

编辑:我正在使用一条语句执行 2 次更新,这导致了问题!

最佳答案

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

如果您打印堆栈跟踪而不是仅仅捕获异常而不执行任何操作,您会看到它会打印如下内容:

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 和 Insert 使用了 THE SAME 语句。这会导致“附加”到 Statement 的结果集关闭,因为它不应该再次使用。

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

        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);

关于java - Resultset.next 返回 true 但不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com