異常信息
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);
}
問題解決咯