从MySQL到Java中的JTable获取数据



我正在尝试在我的jtable中获取信息并阅读mysql的信息,看来我可以看到我的时代来自这个部分,因为我可以看到我不知道该怎么办,现在我有一个DefaultTableModel,它定义了JTable将使用的方法,并且我正在覆盖GetColumnClass,我希望我的代码从班级中获得柱子。

static DefaultTableModel TableModel = new DefaultTableModel(dataInfo, columns){
     public Class getColumnClass(int column) {
           if ((column >= 0) && (column < getColumnCount())) {
                  returnValue = getValueAt(0, column);
     } else {

                  returnValue;
                }

            };

如果我清楚地了解您,则需要添加.getClass方法,该方法有助于将变量获取到左侧,您还必须返回类的值如下所示。在每一列中进行第一个条目。希望能帮助到你。假设您的列没有零。

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来确定列代表的最合适类型的对象(基于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数据库访问...