2013-12-09 126 views
0

首先,我有一个数据库连接,它的设置和工作,现在的问题 - 我有一个搜索按钮,它有一个actionlistener连接,当它被点击它应该填充一个JTable,但表没有被填充,我无法弄清楚为什么!下面显示了我的连接代码和试图填充表的代码。JTable没有被填充数据从数据库中提取

public void search() 
{ 
    btnSearch.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent ae) 
     { 
      //String name = txtname.getText(); 

      String dataSourceName = "securitySystem"; 
      String dbUrl = "jdbc:odbc:" + dataSourceName; 

      try{ 
       //Type of connection driver used  
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

       //Connection variable or object param: dbPath, userName, password 
       Connection con = DriverManager.getConnection(dbUrl, "", ""); 

       Statement statement = con.createStatement(); 

       ResultSet rs = statement.executeQuery("select * from accesshistory"); 

       String name = ""; 

       DefaultTableModel model; 
       model = new DefaultTableModel(); 
       tableAccess = new JTable(model); 

       model.addColumn("Full Name"); 

       while(rs.next()) 
       { 
        name = rs.getString("Name");  
        model.addRow(new Object[]{name}); 
       } 

       statement.close(); 
       con.close(); 
      }catch (Exception e) { 
       try { 
        throw e; 
       } catch (Exception e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
      }      
     } 
    }); 
+0

的问题,你可以尝试添加'model.fireTableDataChanged()'和'model.fir eTableStrukruteChanged()'while循环后 我个人认为这不是用'JTables'和'DefaultTableModel'处理的最好方法吗? – Stone

+0

你能否给我一个方向从哪里开始,然后什么是最好的在这个情景练习? –

+0

正如我在学校学到的那样,您应该创建一个数据库类,以便处理所有SQL查询。
比你应该在这个类中创建一个从'defaultTableModel'扩展的类,你可以覆盖你需要的方法。如'addColumn'和'addRow',如果你想我可以给你一个例子类。 – Stone

回答

1

你似乎在search()方法中分配新的表组件。但是这个新表格甚至没有添加到容器中。不要重新分配表格组件,而应使用setModel()来刷新数据。您也可以更新现有模型。例子见How to Use Tables

另外,为了获得更好的用户体验和性能,请勿在Event Dispatch Thread上执行长时间运行的任务,如数据库交互。为此,使用辅助螺纹或SwingWorker。有关详细信息和示例,请参阅Concurrency in Swing

+1

+1,是应该对模型做出更改。 table.setModel(...)方法应该在ResultSet中的所有数据读取完成后立即被调用,而不是每行更新一次。 – camickr

0
  • 首先请为设计宗旨,稳健性也从来没有创建一个事件处理程序 数据库连接,如果添加为 单,然后称为静态
  • 其次看看这个Post我想会更好你面对的是超过JTableModel对象的声明和分配

好运