我想查询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);
}
答案 0 :(得分:3)
此代码存在一些问题。
这样的事情:
// 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);