使用resultSet值将HashMap转换为ArrayList

时间:2018-01-29 14:35:40

标签: java arraylist hashmap

我想查询sql语句并创建一个hashmap来存储2个值。一个是身份证,另一个是姓名。然后我想将它添加到ArrayList。我的代码有问题,并且与特定类型不匹配。我不明白它有什么问题。你能解释一下我在这里做错了什么吗?据我所知,你不能将类型为<String, String>的散列图添加到ArrayList,但我怎样才能以其他方式实现呢?

ArrayList<String> KEYWORDS = new ArrayList<String>();

String sql = "SELECT da_tag_name, da_tag_id FROM da_tags WHERE da_tag_type_id = 8";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery();

while (resultSet.next()) {
    HashMap<String, String> row = new HashMap<String, String>();
    row.put(resultSet.getString(1).toString(), resultSet.getString(2).toString());
    KEYWORDS.add(row);
}

3 个答案:

答案 0 :(得分:3)

此代码存在一些问题。

  1. 列表的通用类型与您尝试添加的类型不匹配
  2. 你应该养成编程接口的习惯,而不是实现
  3. 变量应该是camelCase(全部大写是常量)
  4. 这样的事情:

    // Note: as of Java 7 you can simplify generics using the diamond operator   
    List<Map<String, String>> keywords= new ArrayList<>();
    
    String sql = "SELECT da_tag_name, da_tag_id FROM da_tags WHERE da_tag_type_id = 8";
    PreparedStatement stmt = conn.prepareStatement(sql);
    ResultSet resultSet = stmt.executeQuery();
    
    while (resultSet.next()) {    
        Map<String, String> row = new HashMap<>();
        row.put(resultSet.getString(1).toString(), resultSet.getString(2).toString());    
        keywords.add(row);    
    }
    

    最后,我会考虑设计并质疑只使用一个条目的HashMap的使用。

答案 1 :(得分:1)

您可以做的最好的事情是创建一个代表您的数据库关键字对象的自定义类。例如:

class Keyword {

         private final long id;
         private final String name;

         public Keyword(long id, String name) {
              this.id = id;
              this.name = name;
         }

         public long getId() {
              return this.id;
         }

         public String getName() {
              return this.name;
         }
    }  

最好使用接口List而不是ArrayList。然后就是这样:

List<Keyword> keywords = new ArrayList<>();

然后在while循环中,您可以添加ResultSet

中的所有关键字
    while (resultSet.next()) {
         Keyword keyword = new Keyword(resultSet.getLong(2), resultSet.getString(1));
         keywords.add(keyword);
    }

答案 2 :(得分:1)

您需要更改

ArrayList<HashMap<String, String>> keyword = new ArrayList<>();

row

因为,您试图将HashMap的{​​{1}}类型添加到List

keyword.add(row);
相关问题