【问题标题】:Iterate 2D array of ResultSet to JTable将 ResultSet 的二维数组迭代到 JTable
【发布时间】:2016-10-11 07:29:51
【问题描述】:

我有一个存储所有查询操作的结果集类。我的问题是我试图用结果集数据填充一个 jtable,但我只能在我有三个的列中显示数据。这是结果集类的sn-p:

public static List<List<String>> getAllFabrics() throws SQLException{
    sql = "SELECT * FROM fabric";

    List<List<String>> values = new ArrayList<>();
    List<String> id = new ArrayList<>();
    List<String> item = new ArrayList<>();
    List<String> supplier = new ArrayList<>();
    stmt = con.createStatement();
    rs = stmt.executeQuery(sql);
    //metaData = rs.getMetaData();
    //int columnNum = metaData.getColumnCount();
    while(rs.next()){
        id.add(String.valueOf(rs.getInt("id")));
        item.add(rs.getString("ItemDesc"));
        supplier.add(rs.getString("Supplier"));

        }
    values.add(id);
    values.add(item);
    values.add(supplier);

    return values;
}

这是我试图解决几个小时的 jtable 方法:

public static DefaultTableModel loadTable(){
    ModelDB model = null;
    DefaultTableModel tableModel = new DefaultTableModel();
    tableModel.addColumn("ID");
    tableModel.addColumn("Fabric");
    tableModel.addColumn("Supplier");

    try{
        List<String> id = model.getAllFabrics().get(0);
        List<String> item = model.getAllFabrics().get(1);
        List<String> supplier = model.getAllFabrics().get(2);

        //System.out.println(model.getAllFabrics().size()); tableModel.addRow(new Object[]{subRow});
        for(List<String> row:model.getAllFabrics()){
            tableModel.addRow(new Object[]{id,item,supplier});
        }


    }catch(SQLException ex){
        ex.printStackTrace();
    }
    return tableModel;
}

我找不到迭代值以显示在各自列中的方法。

【问题讨论】:

  • 与其形成列列表,不如尝试按行形成数据列表,然后迭代并在 Jtable 中显示数据
  • 不是按列形成数据,而是按行形成列表,然后迭代并在JTable中显示数据

标签: java mysql arraylist jtable


【解决方案1】:

原答案

你快到了!你只需要改变循环:

for(int i = 0; i < id.size(); i++) {
    tableModel.addRow(new Object[] {id.get(i),item.get(i),supplier.get(i)});
}

但正如 cmets 中所说,您应该考虑更改为行数组,而不是列。

编辑

这是一种方法。它与您的代码基本相同,只是行/列互换,因此该方法返回行列表,而不是列:

public static List<List<String>> getAllFabrics() throws SQLException{
    sql = "SELECT * FROM fabric";
    List<List<String>> values = new ArrayList<>();
    stmt = con.createStatement();
    rs = stmt.executeQuery(sql);
    while(rs.next()){
        List<String> row = new ArrayList<>();
        row.add(String.valueOf(rs.getInt("id")));
        row.add(rs.getString("ItemDesc"));
        row.add(rs.getString("Supplier"));
        // Now row contains {id, item, supplier}
        values.add(row);
    }
    return values;
}

然后在您的 loadTable() 方法中更改为:

...

try{
    for(List<String> row: model.getAllFabrics()){
        tableModel.addRow(row.toArray(new String[row.size()]);
    }
...

在您的原始代码中,您多次调用 model.getAllFabrics() 以获取返回值。这不好,因为每次您这样做时,都会调用该方法并且它需要再次发出 SQL 请求等。将返回值存储在一个变量中。在这种情况下,虽然返回值只有在你可以按照我上面描述的那样做时才被访问。

希望这会有所帮助:)

【讨论】:

  • 我不知道如何,这是我第一次使用 java,因为我的上一个项目是在 php 中。
  • 感谢它的工作,但如果您能发布有关如何创建行数组的帖子,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 2015-04-04
  • 2014-05-30
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2022-11-27
相关资源
最近更新 更多