我试图从查询中迭代结果集,但是我得到了一些我无法解释的奇怪行为。我已经在网上和离线搜索了几个小时了,我希望你们中的一个能看到是什么引起的,或者可能知道是什么引起的。
我正在使用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然而,在persons数组中,内容是Doris,Doris (第二个名字两次)。
发布于 2018-09-30 19:48:07
您正在重写同一个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);
}https://stackoverflow.com/questions/52581526
复制相似问题