JDBC ResultSet数据到HashMap

时间:2015-04-22 03:09:04

标签: java mysql java-ee jdbc jdbctemplate

我无法将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

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