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

JSP 刪除資料庫資料:變數未正確拼接導致 SQL 執行無回應

     編輯:程式設計綜合問答

問題現象

JSP 頁面執行 DELETE 陳述式時,直接寫死 '郭海濤' 可成功刪除並回傳影響列數;但使用變數 name 拼接 SQL 字串 "DELETE ... WHERE customername ='name'" 卻無法刪除,且無錯誤訊息。

錯誤代碼

String name = ...; // 已確認值為 "郭海濤"
String sql = "DELETE FROM customers WHERE customername ='name'"; // 錯誤:name 被視為字面字串
int i = stat.executeUpdate(sql);

根本原因

Java 字串常值 "... 'name' ..." 內的 name 只是字元序列,不會自動替換為變數內容。送至資料庫的 SQL 實際為 WHERE customername = 'name',查無此資料故影響列數為 0。

正確寫法

方式一:字串串接(不推薦,有 SQL Injection 風險)

String sql = "DELETE FROM customers WHERE customername = '" + name + "'";

方式二:PreparedStatement(推薦,安全且效能佳)

String sql = "DELETE FROM customers WHERE customername = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
int i = pstmt.executeUpdate();

補充說明

  • 若資料庫編碼與 JSP 編碼不一致(如 GBK vs UTF-8),中文參數可能亂碼,導致查無資料。請確認 request.setCharacterEncoding、資料庫連線 URL characterEncoding、表欄位編碼一致。
  • 永遠使用 PreparedStatement 處理動態參數,避免注入攻擊並自動處理引號轉義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved