No?

Tags: 參數, 文峰區,

最近在做一個web項目中,需要使用mysql進行參數化like語句模糊查詢,

簡單來說,就是比如查詢 '文峰區', 返回查詢地址字段中包含有"文峰區"的結果,

比如這條就是一個合法的查詢結果。——“【文峰區】安陽師範學院後營 ”

但是當我使用參數化查詢時卻總是提示

”No parameters defined during prepareCall()”

在鼓搗了N久之後終於搞定了,特此分享此經驗,希望可以幫到遇到相同問題的朋友。

故障圖如下圖所示:

No parameters defined during prepareCall

工具/原料

MyEclipse

MySql

Tomcat

方法/步驟

先看我按照慣例寫的代碼

"select * from t_jobinformation where jobAddress like '%?%' ";

No parameters defined during prepareCall

運行後結果出現下圖中的故障

”No parameters defined during prepareCall()”

這是因為

"select * from t_jobinformation where jobAddress like '%?%' ";

這種寫法中'%?%'語句將%?%會被當做一個字符串處理,

所以無法執行參數化查詢

No parameters defined during prepareCall

後來我又改成

select * from t_jobinformation where jobAddress like '%"+jobAddress+"%' ";

No parameters defined during prepareCall

結果成功執行了,但是這就不是參數化查詢了,可能存在Sql注入危險,所以果斷廢棄這種方法。

但這個測試應該可以說明別的代碼沒有問題,問題在Sql查詢語句上。

No parameters defined during prepareCall

後來查了半天相關專業書籍,修改最終正確代碼如下:

"select * from t_jobinformation where jobAddress like concat('%',?,'%')";

備註:

concat(var1,var2,.....)mysql中特有的拼接字符串的方式

No parameters defined during prepareCall

再次部署發佈運行,終於成功不報錯了。

No parameters defined during prepareCall

注意事項

第一次傳統那種寫法錯誤原因因為'%?%'語句將%?%會被當做一個字符串處理,無法執行參數化查詢

concat(var1,var2,.....)是mysql中特有的拼接字符串的方式

相關問題答案