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

时间:2014-11-12 16:48:08

标签: java database swing jtable

使用二维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);
   }


    }     

1 个答案:

答案 0 :(得分:0)

您将多次添加相同的data4 ArrayList到list4的list4列表,这可能使您看起来只是在读取一行数据。要解决此问题,您需要创建一个新的data4 ArrayList,该列表似乎包含每个单独的数据行,在while循环中

这样:

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

您的代码似乎也与Swing线程规则相冲突,因为您的数据库交互应该都在后台线程中完成。