Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据插入到动态定义列的swing表中(来自mysql数据库的数据)?_Java_Mysql_Swing_Jtable_Jtableheader - Fatal编程技术网

Java 如何将数据插入到动态定义列的swing表中(来自mysql数据库的数据)?

Java 如何将数据插入到动态定义列的swing表中(来自mysql数据库的数据)?,java,mysql,swing,jtable,jtableheader,Java,Mysql,Swing,Jtable,Jtableheader,我有一个表,在框架的一个开口处,该表从mysql数据库中的表接收其列及其各自的标题。如何将sql数据库表中的所有值插入swing表?? 这是我的密码 DefaultTableModel dtm=(DefaultTableModel)jTable1.getModel(); String query1=null; try { query1="select * from "+Variables.table+";"; ResultSet rsft=st.executeQuery(query

我有一个表,在框架的一个开口处,该表从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是包含表名的静态变量。 谢谢

问题是,尽管添加了一些行,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调用包装在SwingUtilitiesinvokeXXX调用中,或者在后台线程上构造一个新的TableModel并在EDT上一次性替换该模型来避免这种情况。有关更多信息,请参阅。 不要忘记在finally块中关闭结果集 问题是,尽管添加了一些行,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调用包装在SwingUtilitiesinvokeXXX调用中,或者在后台线程上构造一个新的TableModel并在EDT上一次性替换该模型来避免这种情况。有关更多信息,请参阅。 不要忘记在finally块中关闭结果集