2012-03-06 42 views
0

我有一个JComboBox从数据库中检索数据并将其显示在JTable中。除了来自不同数据库的数据在JTable中组合之外,一切运作良好。你有什么想法如何显示只有特定数据库的数据?谢谢!如何显示来自数据库的数据而无需在JTable中追加其他数据库中的其他数据?

下面是我使用的代码。

private void comBoxActionPerformed(java.awt.event.ActionEvent evt) 
    {          
     if (comBox.getSelectedItem() == "Select . . .") { 

     } else if (comBox.getSelectedItem() == "Students") { 
     DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
     String sql = "select * from students"; 
     try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(tests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/datavisibility","root",""); 
     Statement statmnt = connect.createStatement(); 
     ResultSet rslt = statmnt.executeQuery(sql); 
     while(rslt.next()){ 
      String id = rslt.getString("ID"); 
      String name = rslt.getString("Name"); 
      String surname = rslt.getString("Surname"); 
      String age = rslt.getString("Age"); 
      model.addRow(new Object[]{id,name,surname,age}); 
     } 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
    } else if (comBox.getSelectedItem() == "Teachers"){ 
    DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
    String sql = "select * from teachers"; 
    try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(tests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/datavisibility","root",""); 
     Statement statmnt = connect.createStatement(); 
     ResultSet rslt = statmnt.executeQuery(sql); 
     while(rslt.next()){ 
      String id = rslt.getString("ID"); 
      String name = rslt.getString("Name"); 
      String surname = rslt.getString("Surname"); 
      String age = rslt.getString("Age"); 
      model.addRow(new Object[]{id,name,surname,age}); 

     } 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
    } else if (comBox.getSelectedItem() == "Directors") { 
    DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
    String sql = "select * from directors"; 
    try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(tests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/datavisibility","root",""); 
     Statement statmnt = connect.createStatement(); 
     ResultSet rslt = statmnt.executeQuery(sql); 
     while(rslt.next()){ 
      String id = rslt.getString("ID"); 
      String name = rslt.getString("Name"); 
      String surname = rslt.getString("Surname"); 
      String age = rslt.getString("Age"); 
      model.addRow(new Object[]{id,name,surname,age}); 

     } 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
    } 
}         ` 

这是该程序的output

我会很感激任何输入。谢谢!

回答

1

您正在调用model.addRow(),它会将新行添加到现有数据模型中。它不会在任何地方清除数据模型。因此这些行正在被追加到以前的数据。您需要将数据模型设置为新的数据模型或先删除现有的数据。

0

您将不得不先清除行,如在Ashwini的答案中。看看这个框架,使编码更容易。它对你的表格问题有一个答案。基本上你应该建立你的模型,而不是使用DefaultTableModel并为其添加额外的功能。

http://code.google.com/p/swingobjects/

看看在那里的第二个例子描述了使用Swing对象的表模式。

相关问题