[英]JTable Swing retrieve data
我正在嘗試用數據庫中的數據填充表,但是我遇到了一些問題。 有人可以給我一個例子嗎? (因此,該表接受數據的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
。
該類從AbstractTableModel
擴展而來, 這意味着您可以將其設置為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();
}
當我在學校使用該課程時,該課程就開始了,但它並非完全是生產代碼。 今天看的時候,我開始發現問題。
一個問題是它將ResultSet
的全部內容加載到內存中。 很快就會變得丑陋。
同樣,該算法也不是最佳選擇。 它遍歷數據庫游標,好像什么都沒有。 我想如果數據庫先檢索了當前行中的所有對象並將它們分配給相應的列, 然后再繼續進行下一行操作,則數據庫的成本將降低。
不過,我認為這是一個很好的起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.