記一次 like 查詢的MySQL Parameter index out of range 異常

異常信息

TransientDataAccessResourceException: PreparedStatementCallback; Parameter index out of range (xx > number of parameters, which is xx).; nested exception is java.sql.SQLException: Parameter index out of range (xx > number of parameters, which is xx).

問題所在行是使用jdbc like查詢 其原因是因爲符號將值替換符號?無效化了導致需要的參數數量與實際數量參數數量不匹配(SQL語句中一個問號需要對應一個參數)

 if (!StringUtils.isEmpty(productName)) {
	    searchSql += " and productName like '%?%' ";
	    objects.add(productName);
    }

解決這個問題可以使用CONCAT函數來拼接 CONCAT(’%’, ?, ‘%’)

使用方法 mysql CONCAT(str1,str2,…)
返回結果爲連接參數產生的字符串。如有任何一個參數爲NULL ,則返回值爲 NULL。或許有一個或多個參數。 如果所有參數均爲非二進制字符串,則結果爲非二進制字符串。 如果自變量中含有任一二進制字符串,則結果爲一個二進制字符串。一個數字參數被轉化爲與之相等的二進制字符串格式

修改後代碼

if (!StringUtils.isEmpty(productName)) {
    searchSql += " and productName like CONCAT('%', ?, '%') ";
    objects.add(productName);
}

問題解決咯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章