首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Swing JTable 綁定 SQL 數據源的兩種核心方式實戰

     編輯:Java 程式設計入門

JTable 兩大構造入口

構造方法核心參數適用場景
JTable(Object[][] rowData, Object[] columnNames)二維數組 + 列名數組數據量小、一次性載入、結構固定
JTable(TableModel dm)實現 TableModel 介面的模型大數據、分頁、動態更新、可編輯、排序

前置準備

  • MyEclipse 可視化設計器拖入 JTable 控件
  • 已有可用資料庫表(如 t_userr(id, username, password))
  • JDBC 工具類支援 PreparedStatement 查詢返回 ResultSet

方式一:二維數組綁定 (快速原型)

1. ResultSet → Object[][] 轉換工具


public Object[][] resultSetToArray(ResultSet rs) {
    try {
        rs.last();
        int rows = rs.getRow();
        ResultSetMetaData meta = rs.getMetaData();
        int cols = meta.getColumnCount();
        rs.beforeFirst();

        Object[][] data = new Object[rows][cols];
        int r = 0;
        while (rs.next()) {
            for (int c = 0; c < cols; c++) {
                data[r][c] = rs.getObject(c + 1);
            }
            r++;
        }
        return data;
    } catch (SQLException e) { e.printStackTrace(); return new Object[0][0]; }
}

2. 界面代碼綁定


// 獲取數據
UserDAO dao = new UserDAO();
ResultSet rs = dao.getResultSet("SELECT id, username, password FROM t_userr", null);
Object[][] data = dao.resultSetToArray(rs);

// 列名
String[] columns = {"ID", "用戶名", "密碼"};

// 設置模型
jTable1.setModel(new DefaultTableModel(data, columns));

效果圖

JTable 二維數組綁定效果

方式二:自定義 TableModel 綁定 (企業級推薦)

1. 可視化設計器配置 Model 來源

  1. 選中 JTable → 屬性面板 → model 屬性
  2. 選擇「Code」來源
  3. 填寫靜態方法全路徑:com.demo.table.TableModelFactory.createUserModel
Model 來源設置 選擇 Code 來源 填寫方法路徑

2. 實現靜態工廠方法


public class TableModelFactory {
    public static TableModel createUserModel() {
        // 1. 查詢數據
        BaseDAO dao = new BaseDAO();
        String sql = "SELECT id, real_name, username, sex, phone, email, vocation, city FROM jdbc_test";
        List<Map<Object, Object>> list = dao.query(sql, new Object[]{});

        // 2. 轉二維數組
        String[][] data = new String[list.size()][8];
        for (int i = 0; i < list.size(); i++) {
            Map<Object, Object> row = list.get(i);
            int c = 0;
            for (Object key : row.keySet()) {
                data[i][c++] = row.get(key).toString();
            }
        }

        // 3. 列名
        String[] columns = {"ID", "真實姓名", "用戶名", "性別", "電話", "郵箱", "職業", "城市"};

        // 4. 返回 DefaultTableModel (實現 TableModel)
        return new DefaultTableModel(data, columns);
    }
}

效果圖

JTable Model 綁定效果

兩種方式對比與選型

維度二維數組TableModel
代碼耦合度UI 代碼混雜查詢邏輯關注點分離,Model 獨立
可視化設計器支援需手動 setModel原生支援,屬性面板配置
數據量大全量載入內存,易 OOM可實現分頁/虛擬化模型
單元格編輯/渲染DefaultTableModel 有限支援完全可控,覆寫 getColumnClass/isCellEditable
排序/過濾需外部 TableRowSorter模型層原生整合
推薦場景原型、小數據、固定結構生產系統、複雜交互、可維護性

進階提示

  • 大數據量必須實現 AbstractTableModel,重寫 getValueAt 按需查詢(虛擬表格)
  • 可編輯表格需覆寫 isCellEditable、setValueAt 並處理持久化回寫
  • Swing 非線程安全,長查詢必須放 SwingWorker 後台執行,完成後 SwingUtilities.invokeLater 更新模型
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved