最近在做一個web項目中,需要使用mysql進行參數化like語句模糊查詢,
簡單來說,就是比如查詢 '文峰區', 返回查詢地址字段中包含有"文峰區"的結果,
比如這條就是一個合法的查詢結果。——“【文峰區】安陽師範學院後營 ”
但是當我使用參數化查詢時卻總是提示
”No parameters defined during prepareCall()”
在鼓搗了N久之後終於搞定了,特此分享此經驗,希望可以幫到遇到相同問題的朋友。
故障圖如下圖所示:
工具/原料
MyEclipse
MySql
Tomcat
方法/步驟
先看我按照慣例寫的代碼
"select * from t_jobinformation where jobAddress like '%?%' ";
運行後結果出現下圖中的故障
”No parameters defined during prepareCall()”
這是因為
"select * from t_jobinformation where jobAddress like '%?%' ";
這種寫法中'%?%'語句將%?%會被當做一個字符串處理,
所以無法執行參數化查詢
後來我又改成
select * from t_jobinformation where jobAddress like '%"+jobAddress+"%' ";
結果成功執行了,但是這就不是參數化查詢了,可能存在Sql注入危險,所以果斷廢棄這種方法。
但這個測試應該可以說明別的代碼沒有問題,問題在Sql查詢語句上。
後來查了半天相關專業書籍,修改最終正確代碼如下:
"select * from t_jobinformation where jobAddress like concat('%',?,'%')";
備註:
concat(var1,var2,.....)mysql中特有的拼接字符串的方式
再次部署發佈運行,終於成功不報錯了。
注意事項
第一次傳統那種寫法錯誤原因因為'%?%'語句將%?%會被當做一個字符串處理,無法執行參數化查詢
concat(var1,var2,.....)是mysql中特有的拼接字符串的方式