1 回答

TA貢獻1876條經(jīng)驗 獲得超7個贊
我不確定你在哪里聲明了提取方法中的人。
但是在方法中本地聲明一個應(yīng)該可以解決手指交叉的問題。
所以我認為發(fā)生的事情是你宣布了一個全球性的人。你正在設(shè)置字段。所以有一個 person 對象,你只是在改變它的細節(jié)。當您將其添加到 arraylist 時,您將添加對同一個人的引用。所以最后你添加了 3 個對同一個 person 對象的引用。該 person 對象已將其字段設(shè)置為 db 中的最后一個條目。我希望這是有道理的。
我得出這個結(jié)論的原因是當你打印這個人時,我讓你在 rs.next 循環(huán)中做的 println 打印相同的引用。進行下面的更改后,您將看到引用發(fā)生了變化。因為您每次都創(chuàng)建一個新人并返回該新人對象,然后將對該對象的引用添加到數(shù)組列表中。
private Person extractUserFromResultSet(ResultSet rs) throws SQLException {
// add this line below
Person person = new Person();
person.setId(rs.getInt("ID"));
person.setFName(rs.getString("FName"));
person.setLName(rs.getString("LName"));
person.setDOB(rs.getString("DOB"));
person.setDepartment(rs.getString("Department"));
person.setLocation(rs.getString("Location"));
person.setCellNr(rs.getString("Cellnr"));
person.setUsername(rs.getString("Username"));
person.setPassword(rs.getString("Password"));
return person;
}
添加回答
舉報