2015-11-19 4 views
2

Я пытаюсь читать из таблицы тузда и я делаю следующее:Resultset.next возвращает истину, но не возвращает значение

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 на каждой линии!

Есть ли у кого-нибудь идеи, почему это может быть? Спасибо заранее! :(

EDIT: я с помощью одного оператора для выполнения 2 обновления, который вызывает проблемы

+0

Пожалуйста, вставьте код непосредственно. Пробовал ли вы 'int id = Integer.parseInt (rs.getObject (1))' –

+0

Является ли столбец идентификатора уникальным, то есть можно ли иметь несколько строк в таблице Student с тем же идентификатором? – DBug

+0

Нет, поскольку я думал, что не хочу получить объект по абсолютной величине, но идти по строчке и читать дальше. @YassinHajaj – user3153278

ответ

4

Это немного странно, что он всегда возвращает то же значение, потому что она должна возвращать только . первое значение рАЗ

При печати 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) 

Вы используете ТОЛЬКО оператор для выбора, а затем для вставки. Это приводит к тому, что resultSet «привязан» к 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); 
+0

Вы, сэр, легенда! Если бы я мог, я бы дал вам не 1, а 2 Спасибо! @luanjot – user3153278

+0

Просто, если вы принимаете t ответа он достаточно. – luanjot

Смежные вопросы