2015-05-28 108 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

當你添加studentlist,您作爲參考,而不是按值傳遞的學生,因爲這是用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); 
    }