我无法将ResultSet中的数据设置为HashMap。
My Query返回4条记录,但HashMap仅保留最后2条记录。但是,在循环中我能够打印4条记录数据。 任何人都可以帮忙吗?
这是我的代码:
workOrderMap=new HashMap<String, Integer>();
Statement statement = serviceconnection.createStatement();
ResultSet rs = statement.executeQuery("SELECT OPERATION,WORKORDERID FROM History WHERE OPERATION='CREATE'OR OPERATION='UPDATE'");
workOrderMap=new HashMap<String, Integer>();
while (rs.next()) {
workOrderMap.put(rs.getString("OPERATION"), rs.getInt("WORKORDERID"));
System.out.println(rs.getString("OPERATION")); // loops 4 times
}
System.out.println("List of Workorder id's" + workOrderMap.size()); // prints 2
答案 0 :(得分:1)
rs.getString("OPERATION")
只返回了2个不同的值。
这并不奇怪,因为你的WHERE
条款只允许有2个值:
WHERE OPERATION='CREATE' OR OPERATION='UPDATE'
在Map
中,密钥是唯一的,因此使用相同的键值调用put()
将覆盖之前的值。< / p>
将行集转换为POJO时,我更喜欢创建List<Map<String, Object>>
- 列表的每个元素都是一行,相关Map中的每个条目都是列名及其值。
仅供参考,您的WHERE
条款可以更优雅地编写为:
WHERE OPERATION IN ('CREATE', 'UPDATE')
答案 1 :(得分:1)
由于密钥相同,您将在hashmap中只看到2个值。
实施例
Map<String,Integer> workOrderMap=new HashMap<String, Integer>();
workOrderMap.put("S", 1);
workOrderMap.put("S", 1);
workOrderMap.put("S2", 1);
System.out.println(workOrderMap.size());
输出:2