gpt4 book ai didi

java - 将 ResultSet 的二维数组迭代到 JTable

转载 作者:行者123 更新时间:2023-11-29 11:14:27 24 4
gpt4 key购买 nike

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

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;
}

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

最佳答案

原始答案

你就快到了!您只需要更改循环:

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

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

编辑

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

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 - 将 ResultSet 的二维数组迭代到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39972327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com