记一次 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);
}

问题解决咯

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