首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Swing JTable 顯示數據庫查詢結果空指針異常排查

     編輯:程式設計疑難解答

錯誤定位

根據堆疊信息,問題在 `actionPerformed` 中:

  • `LoginForm.ct` 可能為 `null`(靜態 Connection 未初始化)。
  • `createStatement()` 或 `executeQuery()` 拋出 SQLException 被捕獲但未妥善處理,導致後續代碼使用空 `ResultSet`/`Vector`。
  • 未將查詢結果正確填入 `DefaultTableModel`,`JTable` 模型為空或未更新。

修正要點

  1. 確保 `LoginForm.ct` 在登錄成功後正確賦值且非空。
  2. 使用 `try-with-resources` 自動關閉資源:
try (Connection conn = DriverManager.getConnection(...);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(sql)) {

    DefaultTableModel model = (DefaultTableModel) message.getModel();
    model.setRowCount(0); // 清空舊數據
    while (rs.next()) {
        Vector row = new Vector();
        row.add(rs.getString("班級編號"));
        row.add(rs.getString("班級名"));
        model.addRow(row);
    }
} catch (SQLException e) {
    e.printStackTrace();
    JOptionPane.showMessageDialog(this, "查詢失敗: " + e.getMessage());
}
  1. `JTable` 需綁定 `DefaultTableModel`,動態增刪行用 `model.addRow()` / `model.removeRow()`,無需重新 `setModel`。

關鍵建議

  • 不要在 Swing 事件線程執行耗時 DB 操作,使用 `SwingWorker` 異步加載。
  • 參數化查詢防注入:`PreparedStatement` + `?` 佔位符。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved