问题说明
List< Map>.add得到tables 中每个Map的数据全部一样;
问题代码
List<Map<String, String>> tables=new ArrayList<Map<String,String>>();
Map<String, String> jsonObj = new HashMap<String, String>();
// 获取列数
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 遍历ResultSet中的每条数据
while (rs.next()) {
// 遍历每一列
for (int i = 1; i <= columnCount; i++) {
String columnName =metaData.getColumnLabel(i);
String value = rs.getString(columnName);
jsonObj.put(columnName, value);
}
tables.add(jsonObj);
jsonObj.clear();
}
解决方案
寻觅了很久原因不果;找到了新思路如下:
调整位置并增加了Map的创建对象次数;
//table
List<Map<String, String>> tables=new ArrayList<Map<String,String>>();
// 获取列数
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 遍历ResultSet中的每条数据
while (rs.next()) {
Map<String, String> jsonObj = new HashMap<String, String>();
// 遍历每一列
for (int i = 1; i <= columnCount; i++) {
String columnName =metaData.getColumnLabel(i);
String value = rs.getString(columnName);
jsonObj.put(columnName, value);
}
tables.add(jsonObj);
}
总结:
个人分析原因有②:
①List< Map>中存在的Map不是Map的数值,而是Map的内存地址;所以如果ListList< Map>的Map全部指向同一个内存地址的话,值也会随之相同;
②其他原因,还没想到;