【问题标题】:How do I convert a ResultSet in a List of Hashtable?如何转换 Hashtable 列表中的 ResultSet?
【发布时间】:2012-01-18 22:04:29
【问题描述】:

嗯,这一定很容易,但我在任何地方都找不到解决方案。而且我仍然不太习惯使用 Java 来找出方法。

到目前为止,我已经能够循环访问ResultSet,我已经为自己感到非常自豪了。

我想要一个 List,这样我就可以简单地遍历它,然后调用类似 myRow.get('ColumnName'); 的东西。

此外,可能还有另一种数据类型而不是 Hashtable 来存储键/值。有什么建议吗?

非常感谢!

【问题讨论】:

  • 你可以考虑使用 HashMap,将值存储在键/值对中。

标签: java sql


【解决方案1】:

myRow.get('ColumnName'); 已经在ResultSet 中,请参阅getObject(String columnLabel)。现在,ResultSetMap 之间的一个区别是 ResultSet 不是(总是)随机访问。使用ResultSet.next() 越过一行后,它可能不允许您“倒回”到上一行。这样做是有充分理由的:ReusltSet 中的元素数量可以任意大,并且对 map 列表的内存需求会令人望而却步。

如果您决定将其转换为List<Map<String, Object>>,那么您应该创建自己的ListMap 实现,这样Map<String /*columnName*/, Integer /*Index*/> 会给出列名的索引每个数组。我是根据经验说的,我不得不更改一个实现,其中迭代列名列表太昂贵了。

【讨论】:

  • 你是对的。我可以直接从 ResultSet 调用 get 方法。谢谢!
【解决方案2】:

我会使用HashMapHashtable 是老派...

例子:

HashMap<String, Object> p = new HashMap<String, Object>();
p.put("ResultSetkey1","ResultSetvalue1");
p.put("ResultSetkey2","ResultSetvalue2");

【讨论】:

    【解决方案3】:

    我的理解是这样的:

    LinkedList<HashTable<String,String>> list = new LinkedList<>();
    
    
    while(rs.next()){
        Hashtable<String, String> currentRowMap = new Hashtable<>();
    
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        for (int i = 1; i <= columnCount; i++) {
            // retrieves column name and value.
            String key = rsmd.getColumnLabel(i);
            String value = rs.getString(rsmd.getColumnName(i));
            if (value == null) {
                value = "null";
            }
            // builds map.
            currentRowMap .put(key, value);
        }
        list.add(currentRowMap);
    }
    
    return list;
    

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 2011-08-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多