将ResultSet放入HashMap中?

3

我有一个MySQL ResultSet,想把它存储在HashMap中:

Map<String, Integer> myMap = new HashMap<String, Integer>();

在这里获取结果集:
while(rs.next()){                           
    rs.put("Column1","Column2");
}

这不是正确的做法,请问有人能够解释一下正确的做法吗?

3个回答

17
 List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        ResultSetMetaData meta = rs.getMetaData();
        while (rs.next()) {
            Map map = new HashMap();
            for (int i = 1; i <= meta.getColumnCount(); i++) {
                String key = meta.getColumnName(i);
                String value = rs.getString(key);
                map.put(key, value);
            }
            list.add(map);
        }

2

如果我正确理解了你的问题,那么大概是这样:

Map<String, Integer> myMap = new HashMap<String, Integer>();
...
// parsing the column each time is a linear search
int column1Pos = rs.findColumn("Column1");
int column2Pos = rs.findColumn("Column2");
while (rs.next()) {
    String column1 = rs.getString(column1Pos);
    int column2 = rs.getInt(column2Pos);
    myMap.put(column1, column2);
}

为什么不直接使用列名从ResultSet中获取数据? - O.Badr
据我所知,可以直接编写 rs.getString("Column1") 而不是 rs.getString(column1Pos); - O.Badr
抱歉,@O.Badr,你是正确的,我不确定用户为什么想要它。 - Gray

0

你可能需要一个 Map<YourKeyType, Map<String, Integer>>

这样,你就可以将每一行按照 id(无论是什么类型)映射到一个列/值的 map 中。在这里,我假设每一列都是 Integer 类型,因为这是你在问题中提到的,但如果它们不同,你也可以使用 Object 类型。然后,你可以使用 myMap.get(myId).get( "column1" ); 访问这些值,或者使用 keySet() 进行遍历,或者进行其他你需要的操作。

要填充这个 map,你可以这样做:

Map<KeyType, Map<String, Object>> resultMap = new HashMap<KeyType, Map<String, Object>>();
while( rs.next()) {
    Map<String, Object> tmpMap = new HashMap<String, Object>();
    tmpMap.put( "Column1", rs.get( "Column1" );
    // etc. for other columns
    resultMap.put( rs.get( "id" ), tmpMap );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接