Web 開發中 INSERT/DELETE/UPDATE 無處不在。手工拼接 SQL 不僅工作量大,還面臨:字段遺漏、單引號轉義遺漏、類型處理不當(字符串需加引號、數值/函數不需)、維護成本高等問題。
利用 request.getParameterNames() 獲取所有表單元素,約定命名前綴區分語義與類型:
| 前綴 | 語義 | 處理邏輯 |
|---|---|---|
c_ | 公共參數 | c_table 表名、c_genre 操作類型、c_where WHERE 條件 |
s_ | 字符串字段 | 自動加單引號,內部單引號轉義為兩個單引號 |
i_ | 非字符串字段 | 整數、浮點、數據庫函數(now()、to_date())直接拼接,空值轉 NULL |
public String getSQL(HttpServletRequest request) {
String c_table = get("c_table");
String c_genre = get("c_genre");
String c_where = get("c_where");
// 校驗必填參數...
if ("INSERT".equalsIgnoreCase(c_genre)) {
// 遍歷參數,按 s_/i_ 前綴構建 colstr、valstr
// 字符串自動處理 ' → ''
return "INSERT INTO " + c_table + " (" + colstr + ") VALUES (" + valstr + ")";
} else if ("UPDATE".equalsIgnoreCase(c_genre)) {
// 構建 SET 子句
return "UPDATE " + c_table + " SET " + colstr + (c_where.isEmpty()?"":" WHERE "+c_where);
} else if ("DELETE".equalsIgnoreCase(c_genre)) {
return "DELETE FROM " + c_table + (c_where.isEmpty()?"":" WHERE "+c_where);
}
return null;
}
完整代碼包含參數獲取、空值處理、單引號轉義、字符串拼接優化等細節,可直接作為 JavaBean 複用。
後台管理、報表配置、動態表單等「字段多、變更頻、業務邏輯簡單」的 CRUD 密集型模塊。核心交易、複雜業務邏輯仍建議顯式寫 DAO/SQL。