嗯,这一定很容易,但我无法在任何地方找到解决方案。而且我仍然不太习惯使用Java来找到实现它的方法。
到目前为止,我能够遍历ResultSet
并且我已经为自己感到骄傲。
我想要一个List,所以我可以简单地遍历它然后调用类似myRow.get('ColumnName');
的东西。
此外,还有另一种数据类型而不是Hashtable
来存储键/值。有什么提示吗?
非常感谢!
答案 0 :(得分:4)
myRow.get('ColumnName');
已在ResultSet
中,请参阅getObject(String columnLabel)。现在,ResultSet
和Map
之间的一个区别是ResultSet
不是(始终)随机访问。一旦您使用ResultSet.next()
过了一行,它可能不允许您“回放”到上一行。这是有充分理由的:ReusltSet中的元素数量可以任意大,并且地图列表中的内存要求会过高。
如果您决定将其转换为List<Map<String, Object>>
,那么您应该创建自己的List
和Map
实现,以便Map<String /*columnName*/, Integer /*Index*/>
给出每个数组中列名的索引。我是根据经验说的,我不得不改变一个实现,其中迭代列名列表太昂贵了。
答案 1 :(得分:1)
我会使用HashMap
。 Hashtable
是老派......
示例:
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;