Resultset.next return 正确但 return 不正确
Resultset.next returns true but doesn't return the value
我正在尝试读取 mysql table 并且我正在执行以下操作:
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");
始终returns相同的 ID,即使 table每一行的 ID 都不同!
有人知道为什么会这样吗?
先感谢您! :(
编辑:
我正在使用单个语句执行 2 个更新,这是导致问题的原因!
它 return 总是相同的值有点奇怪,因为它应该只 return 第一个值一次。
如果您打印堆栈跟踪而不是仅仅捕获异常而不执行任何操作,您会看到它会打印如下内容:
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 使用了相同的语句,然后对插入使用了相同的语句。这会导致语句 "attached" 的结果集关闭,因为它不应该再次使用。
可以通过创建另一个语句轻松修复它:
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);
我正在尝试读取 mysql table 并且我正在执行以下操作:
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");
始终returns相同的 ID,即使 table每一行的 ID 都不同!
有人知道为什么会这样吗? 先感谢您! :(
编辑: 我正在使用单个语句执行 2 个更新,这是导致问题的原因!
它 return 总是相同的值有点奇怪,因为它应该只 return 第一个值一次。
如果您打印堆栈跟踪而不是仅仅捕获异常而不执行任何操作,您会看到它会打印如下内容:
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 使用了相同的语句,然后对插入使用了相同的语句。这会导致语句 "attached" 的结果集关闭,因为它不应该再次使用。
可以通过创建另一个语句轻松修复它:
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);