Java 重复记录两次

Java 重复记录两次,java,jdbc,Java,Jdbc,我使用JDBC中的以下函数从DB中获取行。我在DB中有两条记录,但它只打印一条记录两次。这就是最后的记录。为什么会这样 public List<Student> getRows() throws SQLException { Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/something", "root", "root"); Statement

我使用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;

    }
public List getRows()引发SQLException{
Connection con=DriverManager.getConnection(“jdbc:derby://localhost:1527/something“,”根“,”根“);
语句stmt=con.createStatement();
结果集rs=stmt.executeQuery(“从学生中选择*);
学生tmp=新学生();
while(rs.next()){
tmp.setId(rs.getInt(“id”);
tmp.setName(rs.getString(“name”);
添加列表(tmp);
}
退货清单;
}

学生
添加到
列表
时,您是通过引用而不是通过值传递学生,因为java就是这样工作的。因此,当您在循环第二次运行时再次更改它时,它会更改列表中的第一个条目,因为它仍然指向学生。您需要执行类似list.add(new Student(Student.getID(),Student.getName())的操作,或者每次循环运行时都可以执行new Student(我认为这是更好的练习)

    while (rs.next()) {
        Student student = new Student();
        student.setId(rs.getInt("id"));
        student.setName(rs.getString("name"));
        list.add(student);
    }