如何在Hashtable列表中转换ResultSet?

时间:2012-01-18 22:04:30

标签: java sql

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

到目前为止,我能够遍历ResultSet并且我已经为自己感到骄傲。

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

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

非常感谢!

3 个答案:

答案 0 :(得分:4)

myRow.get('ColumnName');已在ResultSet中,请参阅getObject(String columnLabel)。现在,ResultSetMap之间的一个区别是ResultSet不是(始终)随机访问。一旦您使用ResultSet.next()过了一行,它可能不允许您“回放”到上一行。这是有充分理由的:ReusltSet中的元素数量可以任意大,并且地图列表中的内存要求会过高。

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

答案 1 :(得分:1)

我会使用HashMapHashtable是老派......

示例:

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

答案 2 :(得分:0)

我了解的是这样的:

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;