Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Am将数据从数据库读取到具有自定义AbstractTableModel的jtable_Java_Database_Swing_Jtable - Fatal编程技术网

Java Am将数据从数据库读取到具有自定义AbstractTableModel的jtable

Java Am将数据从数据库读取到具有自定义AbstractTableModel的jtable,java,database,swing,jtable,Java,Database,Swing,Jtable,Am使用二维ArrayList将数据库数据读入jtable。我使用结果集对数据库中的数据进行迭代,然后将结果保存到AbstractTableModel中,后者随后更新JTable。问题是,只读取最后一行,结果中显示的行数乘以数据库中的行数,只复制最后一行,而不是填充每一行。请告知背后的逻辑 private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {

Am使用二维ArrayList将数据库数据读入jtable。我使用结果集对数据库中的数据进行迭代,然后将结果保存到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);
   }


    }     
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt){
ArrayList数据4;
ArrayList数据5;
试一试{
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
}catch(实例化异常){
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE,null,ex);
}捕获(非法访问例外){
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE,null,ex);
}捕获(ClassNotFoundException ex){
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE,null,ex);
}
PreparedStatement ps=null;
连接c=null;
结果集rs=null;
data4=新的ArrayList();
data5=新的ArrayList();
试一试{
c=DriverManager.getConnection(查询);
}catch(SQLException-ex){
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE,null,ex);
} 
试一试{
String query=“从sow\u info\u 3中选择*”;
ps=c.prepareStatement(查询);
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()){
数据4.add(a,rs.getString(“sow_信息_id”);
数据4.add(b,rs.getString(“sow_名称”);
数据4.添加(c1,rs.getString(“sow_颜色”);
数据4.添加(d,rs.getString(“sow_-weight_-kgs”);
数据4.add(e,rs.getString(“母猪出生日期”);
数据4.添加(f,rs.getString(“母猪品种”);
数据4.add(g,rs.getString(“sow_标记_编号”);
数据4.添加(h,rs.getString(“sow_外壳类型”);
数据4.add(i,rs.getString(“sow_paddock_name”);
数据4.add(j,rs.getString(“sow\u传输状态”);
数据4.add(k,rs.getString(“sow_on_farm_by_status”);
数据5.添加(i1,数据4);
}
模型=新的MyTableModel(数据5,第1列);
jTable1.setModel(model);
}catch(SQLException-ex){
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE,null,ex);
}
试一试{
c、 close();
}catch(SQLException-ex){
Logger.getLogger(SowInformation.class.getName()).log(Level.SEVERE,null,ex);
}
}     

您多次将相同的data4 ArrayList添加到data4列表中,这可能会使您看起来只读取一行数据。要解决这个问题,您需要创建一个新的data4 ArrayList,该列表显示在while循环的内部,保存每一行数据

因此:

while(rs.next()){
data4=新的ArrayList();
数据4.添加(…);
//…等等
}

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

如果您需要发布图像,请发布一个指向该图像的链接,我们可能会将其加载到您的问题中。@AugustineBazirake:如果您的数据库访问需要任何时间来完成,它将完全锁定Swing事件线程,使GUI冻结。出于这个原因,数据库和实际上任何I/O代码都应该在后台线程中完成。有关详细信息,请阅读。非常感谢这篇精彩的信息。说实话,我是java编程新手,事实上我正在做我的第一个项目,但相信我,你的建议非常令人兴奋,我祈祷我们继续支持。
while(rs.next()) {
   data4 = new ArrayList<String>();
   data4.add(...);
   // ... etc
}