为了账号安全,请及时绑定邮箱和手机立即绑定

迭代 ResultSet 时的奇怪行为

迭代 ResultSet 时的奇怪行为

拉丁的传说 2021-10-20 14:45:25
我试图迭代查询的结果集,但出现了一些我无法解释的奇怪行为。我已经在线和离线搜索了几个小时,我希望你们中的一个人可以看到是什么导致了它,或者可能知道是什么导致了它。我正在使用 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: Jackname: Doris然而在persons数组中,内容是Doris,Doris(第二个名字两次)。
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您正在覆盖同一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);

}


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信