You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HashMap嵌套存储仅保留最后一条ResultSet数据问题排查

问题原因及解决办法

你的代码有两个关键问题导致最终嵌套HashMap只保留最后一条数据:

  1. detailsall在循环内重复创建:每次rs.next()都会新建一个空的detailsall,之前循环存入的数据直接被丢弃,最后自然只剩最后一次循环的条目。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:04:55