JDBC ResultSet 数据到 HashMap

JDBC ResultSet Data to HashMap

我无法将 ResultSet 中的数据设置到 HashMap。

我的查询返回 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

只有 2 个不同的值从 rs.getString("OPERATION") 返回。

这不足为奇,考虑到您的 WHERE 子句只允许有 2 个值:

WHERE OPERATION='CREATE' OR OPERATION='UPDATE'

Map 中,键是唯一的,因此使用 相同的 键值调用 put()overwrite 之前的值。


将行集转换为 POJO 时,我更喜欢创建一个 List<Map<String, Object>> - 列表的每个元素都是一行,关联映射中的每个条目都是列名及其值。


仅供参考,您的 WHERE 子句可以更优雅地写为:

WHERE OPERATION IN ('CREATE', 'UPDATE')

由于键相同,您将在 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