使用二维ArrayList将数据库数据读入jtable。我使用Result set迭代数据库中的数据,然后将结果保存到AbstractTableModel中,以后更新JTable。问题是只读取最后一行并在结果中显示数据库中行数的次数,只复制最后一行,而不是填充每一行。请建议背后的逻辑。
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);
}
}
答案 0 :(得分:0)
您将多次添加相同的data4 ArrayList到list4的list4列表,这可能使您看起来只是在读取一行数据。要解决此问题,您需要创建一个新的data4 ArrayList,该列表似乎包含每个单独的数据行,在while循环中 。
这样:
while(rs.next()) {
data4 = new ArrayList<String>();
data4.add(...);
// ... etc
}
您的代码似乎也与Swing线程规则相冲突,因为您的数据库交互应该都在后台线程中完成。