gpt4 book ai didi

java - JTable Swing 检索数据

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:44 25 4
gpt4 key购买 nike

我正在尝试使用数据库中的数据填充表,但是我遇到了一些问题。有人可以给我举个例子吗? (因此该表接受数据的 Object[][] 参数)。我有以下基本代码来显示表格;

class table extends JFrame
{
JTable table;

public table()
{
setLayout(new FlowLayout());
String[] columnNames = {"test","test","test"};
Object[][] data= {{"test","test","test"},{"test","test","test"}};

table = new JTable(data,columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500,100));
table.setFillsViewportHeight(true);

JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
}

最佳答案

两年前,在技校期间,我编写了一个小库,帮助解决练习中提出的一些问题,其中包括一个 DatabaseTableModel .

该类扩展自AbstractTableModelwhich means you can set it作为您的 JTable 的数据源。

以下是从 ResultSet 构造模型的算法:

public final void constructModel(ResultSet rs) throws SQLException {
ResultSetMetaData rsmd = rs.getMetaData();
rs.last();
rowCount = rs.getRow();
int columnCount = rsmd.getColumnCount();
// DatabaseColumn simply holds a name and a Class<?>.
columns = new DatabaseColumn[columnCount];
// This is the Object[][] array that you were talking about.
// It holds all the data from the ResultSet.
data = new Object[columnCount][rowCount];
for (int i = 0; i < columnCount; ++i) {
// Figure out the column name and type.
int j = i + 1;
String colName = rsmd.getColumnLabel(j);
Class<?> colClass = String.class;
try {
colClass = Class.forName(rsmd.getColumnClassName(j));
} catch (ClassNotFoundException ex) {
colClass = String.class;
}
columns[i] = new DatabaseColumn(colName, colClass);
// Get the data in the current column as an Object.
rs.beforeFirst();
for (int k = 0; rs.next(); ++k) {
data[i][k] = rs.getObject(j);
}
}
// Notify listeners about the changes so they can update themselves.
fireTableStructureChanged();
}

当我在学校使用该类(class)时,该类(class)可以正常工作,但它并不完全是生产代码。当我今天看到它时,我开始发现问题。

一个问题是它正在将 ResultSet全部内容加载到内存中。很快就会变得丑陋。

此外,该算法并不完全是最佳的。它与数据库游标一起循环,就好像它什么都没有一样;我假设如果数据库首先检索当前行中的所有对象并在移动到下一行之前将它们分配到适当的列,那么数据库的成本会更低。

尽管如此,我认为这是一个足够好的起点。

关于java - JTable Swing 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593468/

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