nested exception is java.sql.SQLException: No value specified for parameter 46
第 46 個預設參數(`PreparedStatement` 的 `?` 佔位符)未綁定值。通常發生在 **實體類新增欄位,但 SQL 映射(XML/Annotation)未同步更新** 導致參數數量不匹配。
| 檢查點 | 說明 | 修正動作 |
|---|---|---|
| Entity 新增欄位 | `private String newField;` + getter/setter | 確認欄位名稱、型別與資料庫一致 |
| MyBatis ResultMap | ` | 補上缺失映射 |
| Insert SQL | `INSERT INTO t (..., new_field) VALUES (..., #{newField})` | 欄位與 `#{}` 參數一一對應 |
| Update SQL | `UPDATE t SET ..., new_field = #{newField} WHERE ...` | 同步新增 |
| 動態 SQL ` | 若用 ` | 確認條件邏輯不導致參數缺失 |
| @Insert/@Update 註解 | 註解內 SQL 字串 | 同步修改 |
@* 錯誤:Insert SQL 少寫新欄位 *@
@Insert("INSERT INTO t(a,b) VALUES(#{a},#{b})") // 實際表有 a,b,c 三欄
void insert(Entity e);
@* 正確 *@
@Insert("INSERT INTO t(a,b,c) VALUES(#{a},#{b},#{c})")
void insert(Entity e);
「No value specified for parameter N」= **SQL 參數佔位符與實體屬性/映射不一致**。新增欄位時,**務必同步更新 Entity、ResultMap、Insert/Update SQL** 三處,並用 DEBUG 日誌驗證參數綁定順序。