首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代ResultSet时的奇怪行为

迭代ResultSet时的奇怪行为
EN

Stack Overflow用户
提问于 2018-09-30 19:45:07
回答 1查看 41关注 0票数 0

我试图从查询中迭代结果集,但是我得到了一些我无法解释的奇怪行为。我已经在网上和离线搜索了几个小时了,我希望你们中的一个能看到是什么引起的,或者可能知道是什么引起的。

我正在使用Maven、JEE和JDBC。

在对MySQL数据库运行查询之后,我尝试对它进行迭代,并向列表中添加一个DTO (数据传输对象)。

代码语言:javascript
复制
class PersonDTO {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

迭代结果的类使用CDI注入PersonDTO。

我可以在没有任何问题的情况下进行查询,但是这里出错了(rs是ResulSet:

代码语言:javascript
复制
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);
}

我的控制台显示了正确的结果:

代码语言:javascript
复制
name: Jack
name: Doris

然而,在persons数组中,内容是Doris,Doris (第二个名字两次)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-30 19:48:07

您正在重写同一个PersonDTO对象的名称,并多次将其添加到列表中。相反,您应该为循环的每次迭代创建一个新的PersonDTO对象:

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52581526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档