gpt4 book ai didi

java - 如何用数据库填充 JTable 中的数据?

转载 作者:IT老高 更新时间:2023-10-28 20:57:28 25 4
gpt4 key购买 nike

我想显示一个 JTable,它按原样显示来自数据库表的数据。

到目前为止,我一直使用 JTable 来显示来自 Object [ ][ ] 的数据。

我知道显示数据的一种方法是首先将数据库表转换为 Object [ ][ ] 但是还有其他更简单但更强大和灵活的方法吗?

最佳答案

我建议采用以下方法:

  • 创建一个 Row类来表示从您的 ResultSet 读取的行.这可能是对 Object[] 的简单包装。 .
  • 创建一个 List<Row>集合和子类 AbstractTableModel得到这个集合的支持。
  • 使用 SwingWorker填充您的List<Row>通过读取基础 ResultSet后台线程上(即在 doInBackground() 方法中)。调用 SwingWorkerpublish发布方法Row返回事件调度线程(例如每 100 行)。
  • SwingWorkerprocess方法是用读取的最新的行 block 调用的,将它们添加到您的 List<Row>并适当开火TableEvent s 使显示更新。
  • 另外,使用 ResultSetMetaData确定Class TableModel 中的每一列定义。这将导致它们被正确渲染(如果您只使用 2D Object[][] 数组,则不会出现这种情况)。

这种方法的优点是UI在处理大ResultSet时不会锁定。 s,并且显示将随着结果的处理而逐渐更新。

编辑

在下面添加了示例代码:

/**
* 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();

关于java - 如何用数据库填充 JTable 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com