@红薯 求救啊!!!!!最近在开发一个东西,数据库操作层用的是apache dbutils,结果今天遇到一个恶心的问题,就是我的SQL是这样的:
select top 9 * from ENLesson where (name_cn like ? or name_en like ?) and id not in(select top 0 id from ENLesson where name_cn like ? or name_en like ?);
然后程序是queryRunner.query(sql,new BeanListHandler<Lesson>(Lesson.class),"%" + key + "%", "%" + key + "%", "%" + key + "%", "%" + key + "%");
尼玛,程序一直报错:
java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: ',' 附近有语法错误。 Query: select top 9 * from ENLesson where id not in(select top 9 id from ENLesson where name_cn like ? or name_en like ?) and (name_cn like ? or name_en like ?) Parameters: [%java%, %java%, %java%, %java%]我特么现在蛋都 碎了,以前没用过这玩意,这种错误是什么情况?救急啊!!!非常感谢了!
怎么没单引号哪里?你是指参数吗?这里是预处理,不用带'啊like?'多了一个单引号啊。这个我coyp过来写错了,不是这个的问题逗号附近有语法错误,哪里来的逗号。。。回复<aclass='referer'target='_blank'>@新人王:通的过,这个,,不是拼装吧<atarget='_blank'>@张浩春将出来的语句放入查询器查询,看是否能执行通过;然后再检查写的语句,没用过dbunit,拼装sql略显不靠谱。。。。我也在想哪来的逗号,坑爹的啊你搞错了吧。query第三个参数你这里要传数组吧。回复<aclass='referer'target='_blank'>@我是潮汐:解决个屁啊,它的BUG,我没办法了,我现在换数据库回复<aclass='referer'target='_blank'>@张浩春:额,我用的最新版,没过时。恭喜你解决问题。回复<aclass='referer'target='_blank'>@我是潮汐:过时了,再说过不过时已经不重要了,我找到是sqlserverjdbcdriver的BUG了回复<aclass='referer'target='_blank'>@张浩春:你用的哪个版本?传数组的并没有过时啊。问题不在这里,传数组的已经被丢弃了。现在是不定参数可能变长参数有问题,试试传数组吧。找到问题了,尼玛,是sqljdbc4.jar的问题,在dbutils里面有这样一个方法stm.getParameterMetaData();执行这个方法的时候出错了,也就是说是sqlserver驱动的问题
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。