java - 迭代 ResultSet 时的奇怪行为
问题描述
我正在尝试从查询中迭代结果集,但我遇到了一些我无法解释的奇怪行为。我已经在线和离线搜索了几个小时,我希望你们中的一个人能看到是什么原因造成的,或者可能知道是什么原因造成的。
我正在使用 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(第二个名字两次)。
解决方案
您正在覆盖同一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);
}
推荐阅读
- python - 在 Tkinter 中将变量重置为零
- crystal-reports - Crystal Reports 不错的选择
- python - 从另一个数据框的列组成数据框
- java - 无需额外分配即可将 CharSequence 转换为 String
- c# - FileProvider 尝试在具有外部路径的空字符串上调用 XmlResourceParser
- graphileon - Graphileon CORS 问题
- apache-kafka - 如何配置 Kafka 以重复未提交的偏移量消息?
- python - Sklearn PCA解释方差和解释方差比差
- jquery - 打开单个下拉菜单。简化代码
- reactjs - 将组件 defaultProps 设置为 null 是不好的做法吗?