2013-02-26 72 views
0

我有一个JTable的问题,那就是当多于1行从MySQL表返回时,JTable只显示1条记录 - (最后一条),但是当我尝试简单时System.out.print它显示所有记录。 继承人我的代码:Java JTable不显示MySQL中的所有行

System.out.println("MySQL Connect Example."); 
    Connection conn = null; 
    String url = "jdbc:mysql://xxx.xx.xxx.xx:3306/"; 
    String dbName = "smartcart"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "xxx"; 
    String password = "xxx"; 
    Statement stmt = null; 
    ResultSet rs = null; 
     cartID=jTextField1.getText().trim(); 
     if(cartID.matches("(\\w*)") && !cartID.isEmpty()) 
     { 
      jLabel2.setText("Searching....."); 
       try { 
         Class.forName(driver).newInstance(); 
     conn = DriverManager.getConnection(url+dbName,userName,password); 
     System.out.println("Connected to the database"); 
     stmt = conn.createStatement(); 
         String query = "SELECT * FROM user_stock WHERE cartID="+cartID; 
         rs = stmt.executeQuery(query); 
         jInternalFrame1.setVisible(true); 
         while (rs.next()) { 
           jTable1.setModel(new javax.swing.table.DefaultTableModel(
           new Object [][] { 
            {rs.getString("id"), rs.getString("product_name"), rs.getString("product_code"), rs.getString("product_quantity"), rs.getString("product_price"), "0"} 
           }, 
           new String [] { 
            "Product No.", "Product Name", "Product Code", "Product Quantity", "Product Price", "Discount" 
            } 
           )); 
         } 
     conn.close(); 
     System.out.println("Disconnected from database"); 

         } 
       catch (Exception e) { 
        e.printStackTrace(); 
       } 
     } 

回答

1

你现在重新创建为每一个新的TableModel返回的行而不是所有行一个模型:

String query = "SELECT * FROM user_stock WHERE cartID="+cartID; 
rs = stmt.executeQuery(query); 
jInternalFrame1.setVisible(true); 
javax.swing.table.DefaultTableModel model = new javax.swing.table.DefaultTableModel(); 
model.setColumnIdentifiers(new String [] { 
           "Product No.", "Product Name", "Product Code", "Product Quantity", "Product Price", "Discount" }); 
jTable1.setModel(model); 
while (rs.next()) { 
    model.addRow(new Object [] { 
       rs.getString("id"), rs.getString("product_name"), rs.getString("product_code"), rs.getString("product_quantity"), rs.getString("product_price"), "0"});  
} 

注意事项:我没有测试过,也没有上面的代码执行,但它不应该是很难解决错别字或缺少括号。

现在,你也可以简化你的生活,并直接重用ResulSetTableModel这一切都为你做。

+0

什么是 'ùpdel' 调用? – 2013-02-26 14:20:27

+0

@ user210068已修复的错字。刷新你的屏幕 – 2013-02-26 14:21:27

+0

Thnaks很多先生,它的工作! – 2013-02-26 14:22:37

0

您muste只创建一个整个结果集的TableModel。

1

1)XxxTableModel在无端环被re_created上,每个环路

2)的一个新的模型不创建新的XxxTableModel,也不内部try - catch - finally

jTable1.setModel(new javax.swing.table.DefaultTableModel(

3)不原因包括与

new Object [][] { 
{ 
rs.getString("id"), rs.getString("product_name"), rs.getString("product_code"), 
    rs.getString("product_quantity"), rs.getString("product_price"), "0"} 
}, 
new String [] {"Product No.", "Product Name", "Product Code", "Product Quantity", 
    "Product Price", "Discount" } 
)); 

4)重用XxxTableModel

5)然后里面JDBC添加新行到已经initalized为局部变量XxxTableModel

6)有与Concurency in Swing潜在的问题已经可见GUI的所有更新必须在Event Dispatch Thread

    完成
  • 通过包裹内部invokeLater

  • Runnable#Thread调用JDBC(由每行的包装内invokeLater

  • SwingWorker