1

我有一个表,在打开一个框架时,该表从 mysql 数据库中的一个表中接收它的列和它们各自的标题。如何将 sql 数据库表中的所有值插入到 swing 表中?这是我的代码...

DefaultTableModel dtm=(DefaultTableModel)jTable1.getModel();
String query1=null;
try    {
  query1="select * from "+Variables.table+";";
  ResultSet rsft=st.executeQuery(query1);  
  Object o[]=new Object[x];  
  while(rsft.next()) {                
    for(int i=1;i<=x;i++){
      o[i-1]=rsft.getString(i);
    }
    dtm.addRow(o);
  }
} catch(Exception e) {
  System.out.println(e.getMessage());  
}

在上面的代码中,x 是一个整数,表示 sql 表中的列数。而 Variables.table 是一个包含表名的静态变量。谢谢你

4

1 回答 1

1

问题是它getColumnCount仍然会返回 0,尽管您添加了一些行。打电话setColumnCount也行。

您可以在源代码中验证这一点,或者只是执行快速测试,例如

import javax.swing.table.DefaultTableModel;

public class DefaultTableModelDemo {
  public static void main( String[] args ) {
    DefaultTableModel defaultTableModel = new DefaultTableModel();
    defaultTableModel.addRow( new Object[]{"Test", "Test"} );
    System.out.println( "defaultTableModel.getRowCount() = " + 
       defaultTableModel.getRowCount() );
    System.out.println( "defaultTableModel.getColumnCount() = " + 
       defaultTableModel.getColumnCount() );
  }
}

给出以下输出

defaultTableModel.getRowCount() = 1
defaultTableModel.getColumnCount() = 0

首先创建一个数据向量可能更容易,然后创建一个新的TableModel并替换现有TableModelJTable.

补充说明:

  • 由于dtm已经用于 a JTable,您应该只在事件调度线程上更新它。但是数据库连接/查询通常是“慢”的,不应该在 EDT 上执行。addRow您可以通过将每个调用包装在一个调用中来避免这种情况,SwingUtilities#invokeXXX或者只是在后台线程上构造一个新TableModel线程并在 EDT 上一次性替换模型。有关更多信息,请参阅Swing 并发教程
  • 不要忘记closeResultSetfinally 块中
于 2012-11-18T10:52:15.573 回答