首頁 > Java > java教程 > 如何從 ResultSet 填入 JTable 並避免 IllegalStateException?

如何從 ResultSet 填入 JTable 並避免 IllegalStateException?

Linda Hamilton
發布: 2024-12-01 05:40:17
原創
136 人瀏覽過

How to Populate a JTable from a ResultSet and Avoid IllegalStateException?

從 ResultSet 填充 JTable

問題描述

在 GUI 應用程式中,使用者在從 ResultSet 更新 DefaultTableModel 時遇到 IllegalStateStateException。目標是在 JTable 中顯示 ResultSet 的內容。

解決方案 1

以下程式碼提供了從 ResultSet 建立 DefaultTableModel 的簡單方法:

public static DefaultTableModel buildTableModel(ResultSet rs)
        throws SQLException {

    ResultSetMetaData metaData = rs.getMetaData();

    // Column names
    Vector<String> columnNames = new Vector<>();
    int columnCount = metaData.getColumnCount();
    for (int column = 1; column <= columnCount; column++) {
        columnNames.add(metaData.getColumnName(column));
    }

    // Table data
    Vector<Vector<Object>> data = new Vector<>();
    while (rs.next()) {
        Vector<Object> vector = new Vector<>();
        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
            vector.add(rs.getObject(columnIndex));
        }
        data.add(vector);
    }

    return new DefaultTableModel(data, columnNames);

}
登入後複製

利用這個方法,可以建構如下表:

JTable table = new JTable(buildTableModel(rs));
登入後複製

解決方案2(使用SwingWorker)

這個解決方案使用SwingWorker在單獨的執行緒中執行資料加載,增強UI回應能力。它也利用 try-with-resources 語句來改善資源管理:

public class GUI extends JFrame {

    // ...

    private void loadData() {
        button.setEnabled(false);

        try (Connection conn = DriverManager.getConnection(url, usr, pwd);
             Statement stmt = conn.createStatement()) {

            ResultSet rs = stmt.executeQuery("select * from customer");
            ResultSetMetaData metaData = rs.getMetaData();

            // ...

            while (rs.next()) {
                // ...
            }

            tableModel.setDataVector(data, columnNames);
        } catch (Exception e) {
            // ...
        }
        button.setEnabled(true);
    }

}
登入後複製

以上是如何從 ResultSet 填入 JTable 並避免 IllegalStateException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板