This question already has answers here:
Why does my ArrayList contain N copies of the last item added to the list?
(4个答案)
2年前关闭。
我试图遍历查询的结果集,但出现了一些我无法解释的怪异行为。我已经在线和离线搜索了几个小时,希望你们中的一个能看到是什么原因或可能知道是什么原因。
我正在使用Maven,JEE和JDBC。
在对MySQL数据库运行查询后,我试图对其进行迭代并将DTO(数据传输对象)添加到列表中。
我在结果上进行迭代的类使用CDI注入PersonDTO。
我可以毫无问题地进行查询,但是这里出错了(rs是ResulSet:
我的控制台显示正确的结果:
但是,在人员数组中,内容是Doris,Doris(第二个名字两次)。
(4个答案)
2年前关闭。
我试图遍历查询的结果集,但出现了一些我无法解释的怪异行为。我已经在线和离线搜索了几个小时,希望你们中的一个能看到是什么原因或可能知道是什么原因。
我正在使用Maven,JEE和JDBC。
在对MySQL数据库运行查询后,我试图对其进行迭代并将DTO(数据传输对象)添加到列表中。
class PersonDTO {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我在结果上进行迭代的类使用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);
}
我的控制台显示正确的结果:
name: Jack
name: Doris
但是,在人员数组中,内容是Doris,Doris(第二个名字两次)。
最佳答案
您将覆盖同一PersonDTO
对象的名称,并将其多次添加到列表中。相反,您应该为循环的每次迭代创建一个新的PersonDTO
对象:
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);
}
09-26 11:46