异常信息
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);
}
问题解决咯