我試圖迭代查詢的結(jié)果集,但出現(xiàn)了一些我無法解釋的奇怪行為。我已經(jīng)在線和離線搜索了幾個小時,我希望你們中的一個人可以看到是什么導致了它,或者可能知道是什么導致了它。我正在使用 Maven、JEE 和 JDBC。在對 MySQL 數(shù)據(jù)庫運行查詢后,我嘗試對其進行迭代并將 DTO(數(shù)據(jù)傳輸對象)添加到列表中。class PersonDTO { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}我迭代結(jié)果的類使用 CDI 注入 PersonDTO。我可以毫無問題地進行查詢,但是這里出錯了(rs 是 ResulSet:List<PersonDTO> persons = new ArrayList<>();while(rs.next()) String name = rs.getString("name"); System.out.println("Current name: " + name); PersonDTO.setName(name); persons.add(playlistDTO);}我的控制臺顯示正確的結(jié)果:name: Jackname: Doris然而在persons數(shù)組中,內(nèi)容是Doris,Doris(第二個名字兩次)。
1 回答

米脂
TA貢獻1836條經(jīng)驗 獲得超3個贊
您正在覆蓋同一PersonDTO對象的名稱并將其多次添加到列表中。相反,您應該PersonDTO為循環(huán)的每次迭代創(chuàng)建一個新對象:
List<PersonDTO> persons = new ArrayList<>();
while(rs.next())
String name = rs.getString("name");
PersonDTO personDTO = new PersonDTO(); // Or use some injected factory
personDTO.setName(name);
persons.add(personDTO);
}
添加回答
舉報
0/150
提交
取消