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

Excel 導入資料庫下標越界:區域變量遮蔽導致連接對象錯誤

     編輯:程式設計疑難解答

錯誤現象

pstmt.setString(1, paper.getpName()) 拋出 ArrayIndexOutOfBoundsException,但 SQL 參數索引正確。

根因

方法內定義了區域變數 Connection conn = ...,遮蔽了類成員 Connection conn。導致:

  1. 區域 conn 用於查詢判重,查詢後關閉。
  2. 2. 後續插入使用**類成員** conn(已關閉或為 null),PreparedStatement 參數綁定失敗拋出下標越界(實為連接無效的誤導性異常)。

修正

// 移除區域變數聲明,直接使用類成員 conn
// 或統一命名:this.conn = getConnection();
// 更佳:使用 try-with-resources 管理連接生命週期
try (Connection conn = dataSource.getConnection();
     PreparedStatement checkStmt = conn.prepareStatement(sqlCheck);
     PreparedStatement insertStmt = conn.prepareStatement(sqlInsert)) {
    // 判重
    // 插入
}

最佳實踐

  • 避免區域變數與成員變數同名(IDE 會警告)。
  • 資料庫連接**儘量短、用完即關**,使用連接池(HikariCP/Druid)。
  • 批次插入時使用 addBatch() + executeBatch() 提升效能。
代碼截圖 異常截圖 問題定位截圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved