我使用JDBC中的以下函数从DB中获取行。我在DB中有两条记录但它只打印两条记录。这就是最后的记录。为什么会这样?
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;
}
答案 0 :(得分: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);
}