【问题标题】:JDBC ResultSet Data to HashMapJDBC ResultSet 数据到 HashMap
【发布时间】:2015-04-22 03:09:04
【问题描述】:

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

【问题讨论】:

    标签: java mysql jakarta-ee jdbc jdbctemplate


    【解决方案1】:

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

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

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

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


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


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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 2014-03-24
        • 2012-01-13
        相关资源
        最近更新 更多