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

Java JTable 刪除操作報錯問題解析:getValueAt 列索引誤用導致異常

     編輯:程式設計疑難解答

問題背景

在 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 時恰好對應姓名列,故能正常運行。

解決方案

  1. 確認列映射:檢查 aaaa 表格模型中各列對應的數據庫字段順序,確保 getValueAt 的第二個參數為「姓名」所在列索引。
  2. 建議使用主鍵:刪除操作應以唯一主鍵(如 ID)為條件,避免姓名重複導致誤刪。
  3. 調試技巧:在報錯行設置斷點,觀察 getValueAt 實際返回值,或打印列名驗證映射關係。

最佳實踐提醒

代碼缺乏註釋且異常處理為空(catch (Exception e2) {}),強烈建議補全異常日誌輸出,並為關鍵業務邏輯添加清晰註釋,便於後續維護與問題排查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved