No parameters defined during prepareCall
的有关信息介绍如下:最近在做一个web项目中,需要使用mysql进行参数化like语句模糊查询,
简单来说,就是比如查询 '文峰区', 返回查询地址字段中包含有"文峰区"的结果,
比如这条就是一个合法的查询结果。——“【文峰区】安阳师范学院后营 ”
但是当我使用参数化查询时却总是提示
”No parameters defined during prepareCall()”
在鼓捣了N久之后终于搞定了,特此分享此经验,希望可以帮到遇到相同问题的朋友。
故障图如下图所示:
先看我按照惯例写的代码
"select * from t_jobinformation where jobAddress like '%?%' ";
运行后结果出现下图中的故障
”No parameters defined during prepareCall()”
这是因为
"select * from t_jobinformation where jobAddress like '%?%' ";
这种写法中'%?%'语句将%?%会被当做一个字符串处理,
所以无法执行参数化查询
后来我又改成
select * from t_jobinformation where jobAddress like '%"+jobAddress+"%' ";
结果成功执行了,但是这就不是参数化查询了,可能存在Sql注入危险,所以果断废弃这种方法。
但这个测试应该可以说明别的代码没有问题,问题在Sql查询语句上。
后来查了半天相关专业书籍,修改最终正确代码如下:
"select * from t_jobinformation where jobAddress like concat('%',?,'%')";
备注:
concat(var1,var2,.....)mysql中特有的拼接字符串的方式
再次部署发布运行,终于成功不报错了。