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

如何从数据库读取数据填充JTable 解决仅显示最后一条记录问题

问题根源

遍历商品列表的循环中,每次迭代都重新为data变量赋值仅包含当前单条记录的二维数组,前一次循环存入的所有数据都会被覆盖,循环执行完成后data自然只保留最后一条商品记录。
另外代码存在一处笔误:循环内获取分类ID时写的prodcttList是拼写错误,正确变量名为预先定义的productList,该问题会直接导致编译失败。

推荐实现(无需手动构造二维数组)

直接调用DefaultTableModel的addRow方法逐行插入数据即可,不需要提前维护固定长度的二维数组,代码更简洁,后续动态增删表格数据也更方便:

ArrayList<Produkt> productList;

private void createTable() {
    String[] col = {"ID", "name", "price", "category"};
    DefaultTableModel tableModel = new DefaultTableModel(col, 0);

    for (Produkt product : productList) {
        Object[] rowData = new Object[]{
                product.getId(),
                product.getName(),
                product.getPrice(),
                product.getCategory()
        };
        tableModel.addRow(rowData);
    }

    productsTable.setModel(tableModel);
}
固定二维数组的正确写法

如果业务要求必须先把所有数据存入Object[][]结构再传入表格模型,需要先按照商品列表的总长度初始化二维数组,再通过下标逐行填充,禁止在循环内重新给data变量整体赋值:

ArrayList<Produkt> productList;

private void createTable() {
    String[] col = {"ID", "name", "price", "category"};
    // 初始化二维数组:行数等于商品总数,列数固定为4对应4个字段
    Object[][] data = new Object[productList.size()][4];

    for (int i = 0; i < productList.size(); i++) {
        Produkt currentProduct = productList.get(i);
        data[i][0] = currentProduct.getId();
        data[i][1] = currentProduct.getName();
        data[i][2] = currentProduct.getPrice();
        data[i][3] = currentProduct.getCategory();
    }

    productsTable.setModel(new DefaultTableModel(data, col));
}

实际开发中优先选择第一种直接操作TableModel的方案,后续做表格数据新增、删除、修改时不需要重新构造整个二维数组,性能和可维护性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:27:25