簡體   English   中英

JTable Swing檢索數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM