gpt4 book ai didi

java - 我正在从数据库读取数据到具有自定义 AbstractTableModel 的 jtable

转载 作者:搜寻专家 更新时间:2023-10-30 20:54:48 24 4
gpt4 key购买 nike

正在使用二维 ArrayList 将数据库数据读入 jtable。我使用结果集遍历数据库中的数据,然后将结果保存到稍后更新 JTable 的 AbstractTableModel 中。问题是只有最后一行被读取并出现在结果中,是数据库中行数的倍数,只复制最后一行,而不是填充每一行。请告知背后的逻辑。

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
ArrayList<String> data4 ;
ArrayList<ArrayList<String>> data5;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException ex) {
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE, null, ex);
}
PreparedStatement ps=null;
Connection c = null;
ResultSet rs =null;

data4 =new ArrayList<String>();
data5 = new ArrayList<ArrayList<String>>();
try {
c = DriverManager.getConnection(query);
} catch (SQLException ex) {
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE, null, ex);
}
try {

String query ="SELECT * FROM sow_info_3" ;
ps = c.prepareStatement(query);

rs=ps.executeQuery();
int i1=0, a =0,b=1, c1=2, d =3, e= 4, f =5, g =6, h=7, i=8, j=9,k=10;
while(rs.next()){
data4.add(a, rs.getString("sow_info_id"));
data4.add(b, rs.getString("sow_name"));
data4.add(c1,rs.getString("sow_colour"));
data4.add(d,rs.getString("sow_weight_kgs"));
data4.add(e,rs.getString("sow_date_of_birth"));
data4.add(f, rs.getString("sow_breed"));
data4.add(g, rs.getString("sow_tag_number"));
data4.add(h, rs.getString("sow_housing_type"));
data4.add(i, rs.getString("sow_paddock_name"));
data4.add(j, rs.getString("sow_transfer_status"));

data4.add(k,rs.getString("sow_on_farm_by_status"));



data5.add(i1, data4);
}





model = new MyTableModel(data5, column1);
jTable1.setModel(model);

} catch (SQLException ex) {
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE, null, ex);
}

try {
c.close();
} catch (SQLException ex) {
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE, null, ex);
}


}

最佳答案

您将相同的 data4 ArrayList 多次添加到 data4 List of List,这会使它看起来像您只读取一行数据。要解决此问题,您需要创建一个新的 data4 ArrayList,该列表似乎包含每一行数据,位于 while 循环的内部。”

所以:

while(rs.next()) {
data4 = new ArrayList<String>();
data4.add(...);
// ... etc
}

您的代码似乎也违反了 Swing 线程规则,因为您的数据库交互应该全部在后台线程中完成。

关于java - 我正在从数据库读取数据到具有自定义 AbstractTableModel 的 jtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892145/

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