2015-11-19 198 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