【问题标题】:Add a hashmap to an array of hashmaps将哈希图添加到哈希图数组
【发布时间】:2012-09-03 00:01:27
【问题描述】:

我有以下代码:

    ResultSet rs = DB.doQuery("SELECT username,register_ip FROM users ORDER BY joined DESC LIMIT 10");
    Map<String,String> botInfo = new HashMap<String, String>();
    List<Map<String , String>> myMap  = new ArrayList<Map<String,String>>();
    int c = 0;

    while(rs.next()) {
        botInfo.put("username", rs.getString("username"));
        botInfo.put("register_ip", rs.getString("register_ip"));
        myMap.add(c, botInfo);
        c++;
    }

我们的想法是让输出像这样..我将使用 PHP 作为示例:

[0] => array('username' => 'someUsername', 'register_ip' => 'someIP');

等等.. 但是,我得到的是 10 个 HashMap 的列表,它们都包含相同的 username,register_ip 值。我有哪些选择?

【问题讨论】:

标签: java list jdbc hashmap resultset


【解决方案1】:

那是因为您将相同的 botInfo HashMap 添加到您的列表中。您想要做的是在您的 while 循环中创建一个新的 HashMap,向其中添加元素,最后将此映射添加到您的列表中。你想做的是这样的:

ResultSet rs = DB.doQuery("SELECT username,register_ip FROM users ORDER BY joined DESC LIMIT 10");
List<Map<String , String>> myMap  = new ArrayList<Map<String,String>>();
int c = 0;

while(rs.next()) {
    //Create a new instance of the map
    Map<String,String> botInfo = new HashMap<String, String>();

    //Add elements to the the map
    botInfo.put("username", rs.getString("username"));
    botInfo.put("register_ip", rs.getString("register_ip"));

    //Add the map to the list
    myMap.add(c, botInfo);

    //Increment your counter
    c++;
}

【讨论】:

  • 遇到了完全相同的问题,这正是我想要的。很好的答案!
【解决方案2】:
ResultSet rs = DB.doQuery("SELECT username,register_ip FROM users ORDER BY joined DESC LIMIT 10");
List<Map<String , String>> myMap  = new ArrayList<Map<String,String>>();

while(rs.next()) {
    Map<String,String> botInfo = new HashMap<String, String>();
    botInfo.put("username", rs.getString("username"));
    botInfo.put("register_ip", rs.getString("register_ip"));
    myMap.add(botInfo);
}

对于每条记录,您都需要为 botInfo 提供一个新的 HashMap

编辑:c 没用

【讨论】:

    【解决方案3】:
    ResultSet rs = DB.doQuery("SELECT username,register_ip FROM users ORDER BY joined DESC LIMIT 10");
    Map<String,String> botInfo;
    List<Map<String , String>> myMap  = new ArrayList<Map<String,String>>();
    
    while(rs.next()) {
        botInfo = new HashMap<String, String>();
        botInfo.put("username", rs.getString("username"));
        botInfo.put("register_ip", rs.getString("register_ip"));
        myMap.add(botInfo);
    }
    

    使用此代码。这将对您有所帮助。

    【讨论】:

      【解决方案4】:

      试试这个:

      ResultSet rs = DB.doQuery("SELECT username,register_ip FROM users ORDER BY joined DESC LIMIT 10");
      Map<String,String> botInfo;
      List<Map<String , String>> myMap  = new ArrayList<Map<String,String>>();
      String[] columns = {"username", "register_ip"};
      
      while(rs.next()) {
          botInfo = new HashMap<String, String>();
          for(int i = 0; i < columns.length; i++) {
              botInfo.put(columns[i], rs.getString(columns[i]));
          }
          myMap.add(botInfo);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 2011-07-26
        • 2018-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        相关资源
        最近更新 更多