重复记录两次

Repeating a record twice

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

    }

当您将 student 添加到 list 时,您是通过引用而不是值传递学生,因为这就是 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);
    }