2015-11-19 222 views
2

我试图从一个MySQL表来读取和我做了以下值:Resultset.next返回true,但不会返回

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次,这是导致该问题

+0

请直接粘贴代码。您是否尝试了'int id = Integer.parseInt(rs.getObject(1))' –

+0

ID列是唯一的,这意味着可以在具有相同ID的Student表中有多个行吗? – DBug

+0

不,因为我以为我不想通过绝对值获得对象,而是一行一行地阅读。@YassinHajaj – user3153278

回答

4

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

如果打印堆栈跟踪,而不是只捕捉异常,无所事事,你会看到,它会打印出类似这样:

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) 

您正在使用SAME语句进行选择,然后使用插入。这会导致“附加到”语句的结果集关闭,因为它不应该再次使用。

它可以很容易解决,创建另一个声明:

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

你是先生,是一个传奇如果我可以,我会给你不是1但是2 up point!谢谢!@luanjot – user3153278

+0

只要你接受t他的回答就够了。 – luanjot