你需要的数据。 2) JTable“jTable1”是在创建之前创建的 3) 表头是预先实现的 实施 java.sql.ResultSet rs=datacn.executeSelectQuery(查询); //用结果集填充JTable //删除以前的数据 而(jTable1.getRowCount()>0){ ((DefaultTableModel)jTable1.getModel()).removeRow(0); } //为jTable的表模型创建对象[]行数据 int columns=rs.getMetaData().getColumnCount(); while(rs.next()) { 对象[]行=新对象[列]; 对于(int i=1;i

你需要的数据。 2) JTable“jTable1”是在创建之前创建的 3) 表头是预先实现的 实施 java.sql.ResultSet rs=datacn.executeSelectQuery(查询); //用结果集填充JTable //删除以前的数据 而(jTable1.getRowCount()>0){ ((DefaultTableModel)jTable1.getModel()).removeRow(0); } //为jTable的表模型创建对象[]行数据 int columns=rs.getMetaData().getColumnCount(); while(rs.next()) { 对象[]行=新对象[列]; 对于(int i=1;i,java,swing,jtable,Java,Swing,Jtable,我知道这个问题很老了,但是对于遵循Adamski解决方案的任何人来说,在gui和SwingWorker线程之间共享ResultSet和ResultSetMetadata时都应该小心。我在使用SQLite这种方法时遇到了一个不一致的内部状态异常。解决方案是加载任何执行SwingWorker之前将元数据转换为私有字段,并具有getter函数(getColumnName等)改为返回字段。我得到了你的答案,但脑子里仍然有一些困惑。请用一个小代码段来指定。我提到我的问题是对我的新问题的评论。我知道这个答案

我知道这个问题很老了,但是对于遵循Adamski解决方案的任何人来说,在gui和SwingWorker线程之间共享
ResultSet
ResultSetMetadata
时都应该小心。我在使用SQLite这种方法时遇到了一个不一致的内部状态异常。解决方案是加载任何执行
SwingWorker
之前将元数据转换为私有字段,并具有getter函数(getColumnName等)改为返回字段。

我得到了你的答案,但脑子里仍然有一些困惑。请用一个小代码段来指定。我提到我的问题是对我的新问题的评论。我知道这个答案很旧,但什么是模型?模型是TableModel的对象
/**
 * Simple wrapper around Object[] representing a row from the ResultSet.
 */
private class Row {
  private final Object[] values;

  public Row(Object[] values) {
    this.values = values;
  }

  public int getSize() {
    return values.length;
  }

  public Object getValue(int i) {
    return values[i];
  }
}

// TableModel implementation that will be populated by SwingWorker.
public class ResultSetTableModel extends AbstractTableModel {
  private final ResultSetMetaData rsmd;
  private final List<Row> rows;

  public ResultSetTableModel(ResultSetMetaData rsmd) {
    this.rsmd = rsmd;
    this.rows = new ArrayList<Row>();
  }

  public int getRowCount() {
    return rows.size();
  }

  public int getColumnCount() {
    return rsmd.getColumnCount();
  }

  public Object getValue(int row, int column) {
    return rows.get(row).getValue(column);
  }

  public String getColumnName(int col) {
    return rsmd.getColumnName(col - 1); // ResultSetMetaData columns indexed from 1, not 0.
  }

  public Class<?> getColumnClass(int col) {
    // TODO: Convert SQL type (int) returned by ResultSetMetaData.getType(col) to Java Class.
  }
}

// SwingWorker implementation
new SwingWorker<Void, Row>() {
  public Void doInBackground() {
    // TODO: Process ResultSet and create Rows.  Call publish() for every N rows created.
  }

  protected void process(Row... chunks) {
    // TODO: Add to ResultSetTableModel List and fire TableEvent.
  }
}.execute();

    // rs is the ResultSet of the Database table
    public void displayData(ResultSet rs)
    {
        //jt Represents JTable
        //jf represents JFrame
        int i;
        int count;
        String a[];
        String header[] = {"1","2","3","4","5"};   //Table Header Values, change, as your wish
        count = header.length;

//First set the Table header for(i = 0; i < count; i++) { model.addColumn(header[i]); } jt.setModel(model); //Represents table Model jf.add(jt.getTableHeader(),BorderLayout.NORTH); a = new String[count]; // Adding Database table Data in the JTable try { while (rs.next()) { for(i = 0; i < count; i++) { a[i] = rs.getString(i+1); } model.addRow(a); //Adding the row in table model jt.setModel(model); // set the model in jtable } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Exception : "+e, "Error", JOptionPane.ERROR_MESSAGE); } }
        java.sql.ResultSet rs = datacn.executeSelectQuery(query);
        //Filling JTable with Result set

        // Removing Previous Data
        while (jTable1.getRowCount() > 0) {
            ((DefaultTableModel) jTable1.getModel()).removeRow(0);
        }

        //Creating Object []rowData for jTable's Table Model        
        int columns = rs.getMetaData().getColumnCount();
        while (rs.next())
        {  
            Object[] row = new Object[columns];
            for (int i = 1; i <= columns; i++)
            {  
                row[i - 1] = rs.getObject(i); // 1
            }
            ((DefaultTableModel) jTable1.getModel()).insertRow(rs.getRow() - 1,row);
        }