java - 迭代 ResultSet 时出现奇怪的行为

标签 java jdbc

我正在尝试迭代查询的结果集,但我遇到了一些我无法解释的奇怪行为。我已经在线和离线搜索了几个小时,我希望你们中的一个人能看到是什么导致了它,或者可能知道是什么导致了它。

我正在使用 Maven、JEE 和 JDBC。

在对 MySQL 数据库运行查询后,我尝试对其进行迭代并将 DTO(数据传输对象)添加到列表中。

class PersonDTO {
    private String name;

    public String getName() {
        return name;
    }

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

我在其中迭代结果的类使用 CDI 注入(inject) PersonDTO。

我可以毫无问题地进行查询,但这里出了问题(rs 是结果集:

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(第二个名字两次)。

最佳答案

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

关于java - 迭代 ResultSet 时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581526/

相关文章:

java - JTree:如何获取选定节点的路径

java - 读取文件时如何跳过某些文本区域?

java - 仅 1900 年的 Java 日期计算出现 30 分钟错误

java - 如果类是预先定义的,则实例变量充当对象

tomcat - hive-jdbc-standalone.jar 未由 tomcat 7 加载

java - ORA-00933 : SQL command not properly ended - WHERE clause

Java JDBC Eclipse 使用 Oracle DB 填充 JTable

java - 如何获得对 JavaFX 图表的低级别访问以便绘制图像?

java - 一秒插入多少条记录

java - Oracle JDBC 教程 - 想要了解 2 层 JDBC 与 3 层