使用预编译处理一个具体值变量非常的方便,但是与模糊查询结合使用会因为字符解析问题出现错误。
正常模糊查询语句是:
select * from xxx where rank like '%4%'
使用预编译将具体值换成?并将整个语句作为一个字符串。
错误语句为:
String sql = "select * from xxx where rank like '%?%'";
报错:Parameter index out of range (1 > number of parameters, which is 0)
意思是在给第一个变量参数赋值时,没有找到第一个?,?的个数为0。
原因是识别整个字符串sql语句时把 %?% 当作了一个整体的字符串,而没有把?当成需要赋值的参数。
在别人的博客里找到了解决方法,可以使用sql的concat字符串连接函数处理。
正确语句为:
String sql = "select * from xxx where rank like concat('%',?,'%')";