有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在结果集上迭代时的奇怪行为

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

我正在使用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是结果集:

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


共 (1) 个答案

  1. # 1 楼答案

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