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

如何将数据库表指定行数据存入ArrayList并完整输出所有行?

解决数据库查询结果仅输出最后一行的问题

嘿,我一眼就发现问题所在了!你的代码现在只能输出最后一行数据,根源在于两个关键的小疏漏:

  1. 每次循环都覆盖了inner列表:你在while(rs.next())循环里每次都重新创建new ArrayList<>()赋值给inner,前一行的数据会被完全覆盖,最后只剩下最后一次循环创建的列表。
  2. 只打印了一次inner:你把System.out.println(inner)放在了循环外面,自然只能看到最后一次创建的那个列表里的内容。

修复方案

咱们需要一个外层列表来存储每一行的inner列表(也就是一个嵌套的ArrayList<ArrayList<String>>),同时把打印操作放到合适的位置,确保每一行数据都能被输出。

修改后的完整代码

ArrayList<ArrayList<String>> allRows = new ArrayList<>(); // 用来存储所有行数据的外层列表
try{
    // 注意:原SQL里的Score是笔误,表结构里的字段是BILL,这里修正了
    String sql="select Name, BILL, Contact from members"; 
    pst=conn.prepareStatement(sql);
    rs=pst.executeQuery();
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnsNumber = rsmd.getColumnCount();
    
    while (rs.next()) {
        ArrayList<String> inner = new ArrayList<>(); // 为当前行创建新的列表
        for(int i=1; i<=columnsNumber; i++){
            inner.add(rs.getString(i));
        }
        allRows.add(inner); // 将当前行的列表存入外层列表,避免数据丢失
        System.out.println(inner); // 每处理完一行就打印,直接得到你要的格式
    }

    // 如果你想在循环结束后统一打印所有行,也可以用这段代码替代上面的循环内打印:
    // for(ArrayList<String> row : allRows) {
    //     System.out.println(row);
    // }
}catch(Exception e){
    e.printStackTrace(); // 建议加上异常堆栈打印,方便排查潜在问题
}

关键修改点说明

  • 新增了allRows外层列表:用来保存每一行的inner列表,彻底解决数据被覆盖的问题
  • 保留了循环内创建inner的逻辑:确保每一行数据都存在独立的列表里
  • 修正了SQL字段名:原代码里写的Score和表结构的BILL不匹配,这个小问题会导致查询报错,必须修正
  • 把打印移到循环内部:每处理一行就输出一行,完全符合你期望的格式
  • 添加了异常打印:原catch块是空的,一旦出现数据库连接、查询异常你根本不知道问题在哪,加上e.printStackTrace()能帮你快速定位bug

预期输出

修改后运行代码,就能得到你想要的结果:

[james,400,024669]
[Mavis,700,025550]
[john,650,029510]
[bendo,340,023579]

内容的提问来源于stack exchange,提问作者Rodney Nart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:16