首页 > Java > java教程 > 如何从 ResultSet 填充 JTable 并避免 IllegalStateException?

如何从 ResultSet 填充 JTable 并避免 IllegalStateException?

Linda Hamilton
发布: 2024-12-01 05:40:17
原创
206 人浏览过

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

从 ResultSet 填充 JTable

问题描述

在 GUI 应用程序中,用户在从 ResultSet 更新 DefaultTableModel 时遇到 IllegalStateException。目标是在 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板