2015-05-28 2 views
1

Я извлекаю строки из БД, используя следующую функцию в JDBC. У меня две записи в БД, но она печатает только одну запись дважды. И это рекорд, который в конце. Почему это так?Повторная запись дважды

public List<Student> getRows() throws SQLException { 

     Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/something", "root", "root"); 

     Statement stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT * FROM student"); 
     Student tmp = new Student(); 

     while (rs.next()) { 

      tmp.setId(rs.getInt("id")); 
      tmp.setName(rs.getString("name")); 
      list.add(tmp); 
     } 

     return list; 

    } 

ответ

3

Когда вы добавляете student к list, вы передаете студента по ссылке, а не по значению, потому что это, как Java работает. Поэтому, когда вы меняете его снова во второй раз, когда цикл работает, он меняет первую запись в списке, потому что она указывает ученику все еще. Вам нужно сделать что-то вроде list.add (new Student (student.getID(), student.getName()), или вы можете использовать нового ученика каждый раз, когда цикл работает (это будет лучше, я думаю).

while (rs.next()) { 
     Student student = new Student(); 
     student.setId(rs.getInt("id")); 
     student.setName(rs.getString("name")); 
     list.add(student); 
    } 
Смежные вопросы