从 Mysql 中获取数据到 JAVA 中的 JTable

Taking data from Mysql to JTable in JAVA

我正在尝试在我的 Jtable 中获取信息并从 mysql 中读取信息,看起来时代来自这个部分,因为我看到卡住了,我不知道该怎么做,现在我有一个 DefaultTableModel,它定义了 JTable 将使用的方法,并且我正在覆盖 getColumnClass, 我希望我的代码从 class.

中获取列
static DefaultTableModel TableModel = new DefaultTableModel(dataInfo, columns){
     public Class getColumnClass(int column) {

           if ((column >= 0) && (column < getColumnCount())) {
                  returnValue = getValueAt(0, column);
     } else {


                  returnValue;
                }


            };

如果我明白你的意思,你需要添加 .getclass 方法来帮助将变量移到左边,你还必须 return [=13] 的值=] 在这种情况下将按以下方式完成。在每一列中取第一个条目。希望能帮助到你。假设您的列没有空值。

static DefaultTableModel TableModel = new DefaultTableModel(dataInfo, columns){
public Class getColumnClass(int column) {
Class returnValue;
// Verifying that the column exists (index > 0 && index < number of columns
if ((column >= 0) && (column < getColumnCount())) {
  returnValue = getValueAt(0, column).getClass();
    //you need to add the .getclass method which 
                  //gets the variable to the left.
 } else {
  // Returns the class for the item in the column   
 returnValue = Object.class;
                }
 return returnValue;
              }
            };

我们需要稍微修改 TableModel,这样我们就可以控制列 Class 类型...

public class MyTableModel extends DefaultTableModel {

    private List<Class> columnTypes;

    public MyTableModel() {
    }

    public MyTableModel(int rowCount, int columnCount) {
        super(rowCount, columnCount);
    }

    public MyTableModel(Vector columnNames, int rowCount) {
        super(columnNames, rowCount);
    }

    public MyTableModel(Object[] columnNames, int rowCount) {
        super(columnNames, rowCount);
    }

    public MyTableModel(Vector data, Vector columnNames) {
        super(data, columnNames);
    }

    public MyTableModel(Object[][] data, Object[] columnNames) {
        super(data, columnNames);
    }

    public MyTableModel(List<Class> columnTypes) {
        this.columnTypes = columnTypes;
    }

    public MyTableModel(List<Class> columnTypes, Object[] columnNames, int rowCount) {
        super(columnNames, rowCount);
        this.columnTypes = columnTypes;
    }

    public MyTableModel(List<Class> columnTypes, Object[][] data, Object[] columnNames) {
        super(data, columnNames);
        this.columnTypes = columnTypes;
    }

    public MyTableModel(List<Class> columnTypes, Vector data, Vector columnNames) {
        super(data, columnNames);
        this.columnTypes = columnTypes;
    }

    public MyTableModel(List<Class> columnTypes, Vector columnNames, int rowCount) {
        super(columnNames, rowCount);
        this.columnTypes = columnTypes;
    }

    public MyTableModel(List<Class> columnTypes, int rowCount, int columnCount) {
        super(rowCount, columnCount);
        this.columnTypes = columnTypes;
    }

    public void setColumnTypes(List<Class> columnTypes) {
        this.columnTypes = columnTypes;
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return columnTypes.get(columnIndex);
    }

}

然后,我们从数据库加载数据,您可以使用 ResultSet 中的 ResultSetMetaData 来确定该列代表的最合适的对象类型(基于return ResultSet#getObject)

的结果
MyTableModel tableModel = new MyTableModel();
try (ResultSet rs = ...) {
    ResultSetMetaData rsmd = rs.getMetaData();
    List<Class> columnTypes = new ArrayList<Class>(rsmd.getColumnCount());
    for (int column = 0; column < rsmd.getColumnCount(); column++) {
        String className = rsmd.getColumnClassName(column + 1);
        try {
            columnTypes.add(Class.forName(className));
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            columnTypes.add(Object.class);                  
        }
    }
    tableModel.setColumnTypes(columnTypes);

    // Load data from the ResultSet
} catch (SQLException exp) {
    exp.printStackTrace();
}

有关详细信息,请参阅 JDBC Database Access...