从 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...
我正在尝试在我的 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...