HashMap嵌套存储仅保留最后一条ResultSet数据问题排查
问题原因及解决办法
你的代码有两个关键问题导致最终嵌套HashMap只保留最后一条数据:
- detailsall在循环内重复创建:每次
rs.next()都会新建一个空的detailsall,之前循环存入的数据直接被丢弃,最后自然只剩最后一次循环的条目。 - details复用同一个实例:
details是在循环外初始化的,每次循环只是修改这个Map里的键值对,所有存入detailsall的都是同一个Map的引用,最终所有条目都会指向最后一次修改后的内容。
修改后的代码
// 把detailsall移到循环外,确保全程用同一个嵌套Map HashMap<Integer, HashMap<String, String>> detailsall = new HashMap<>(); switch(value){ case "approved": if(rs!=null) { int i = 1; while(rs.next()) { // 每次循环新建一个details实例,避免覆盖之前的数据 HashMap<String,String> details=new HashMap<>(); String NO = rs.getString("NO"); String CLASS = rs.getString("CLASS"); String CLASS_DESC = rs.getString("CLASS_DESC"); details.put("NO", NO); details.put("CLASS", CLASS); details.put("CLASS_DESC", CLASS_DESC); System.out.println(details); detailsall.put(i, details); i++; System.out.println(detailsall); } // 遍历输出验证 for (Map.Entry<Integer, HashMap<String, String>> detailsallmap : detailsall.entrySet()) { System.out.println(detailsallmap.getKey() + " = "+ detailsallmap.getValue()); } } else { // 可根据业务需求调整此处逻辑,比如将detailsall置空 } break; }
关键修改点说明
- 将
detailsall的初始化代码移至while循环外部,确保整个遍历过程使用同一个嵌套HashMap,不会丢失之前存入的数据。 - 在
while循环内部每次新建details实例,这样每条ResultSet的数据都会存入独立的HashMap中,避免后续修改覆盖之前的条目。
内容的提问来源于stack exchange,提问作者Shr
相关产品推荐
相关产品推荐

