在 Java Swing 應用中使用 JTable 顯示數據庫記錄時,實現「刪除」功能遇到運行時異常。代碼嘗試通過 getValueAt(row, 0) 獲取主鍵值執行 SQL 刪除,但僅當列索引為 0 時拋出異常,改為 1 或其他值則正常運行。
int ii = this.bg.getSelectedRow();
if (ii == -1) {
JOptionPane.showMessageDialog(this, "請選中要刪除的行");
return;
}
String st = (String) aa.getValueAt(ii, 0); // 此處報錯
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
ct = DriverManager.getConnection("jdbc:odbc:SQL Sever", "sa", "923274995");
ps = ct.prepareStatement("delete from QQ where xinmin=?");
ps.setString(1, st);
ps.executeUpdate();
} catch (Exception e2) {} finally {
// 資源關閉邏輯
}
aa = new aaaa();
bg.setModel(aa);
異常根因在於 列索引與數據模型不匹配。代碼中刪除 SQL 的條件是 xinmin(姓名字段),但 getValueAt(ii, 0) 獲取的是表格模型第 0 列的值。若表格第一列並非「姓名」,則會傳遞錯誤參數導致數據庫操作異常。當將索引改為 1 時恰好對應姓名列,故能正常運行。
aaaa 表格模型中各列對應的數據庫字段順序,確保 getValueAt 的第二個參數為「姓名」所在列索引。getValueAt 實際返回值,或打印列名驗證映射關係。代碼缺乏註釋且異常處理為空(catch (Exception e2) {}),強烈建議補全異常日誌輸出,並為關鍵業務邏輯添加清晰註釋,便於後續維護與問題排查。