我有一个表,在框架的打开端,该表从 mysql 数据库中的表中接收其列及其各自的标头。如何将 sql 数据库表中的所有值插入到摆动表中?这是我的代码...
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 是一个包含表名的静态变量。谢谢
问题是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
并替换JTable
的现有TableModel
可能会更容易。
进一步备注:
- 由于
dtm
已用于JTable
,因此应仅在事件调度线程上更新它。但数据库连接/查询通常"慢",不应在 EDT 上执行。您可以通过将每个addRow
调用包装在SwingUtilities#invokeXXX
调用中来避免这种情况,或者只是在后台线程上构造一个新TableModel
并在 EDT 上一次性替换模型。有关详细信息,请参阅 Swing 并发教程。 - 不要忘记在最终块中
close
ResultSet