🍻运行SQL语句、SQL文件等报错
🍖问题分析
一般这种问题都是有两种可能(如果你的问题不是这两种,欢迎评论区补充):SQL语法的问题、字段名与SQL的关键字冲突
🥩解决方法
可能性一:sql语法
先检查一下你的SQL语法是不是书写错误,尤其是不被注意的小方面,比如说注释的语法是#而不是//,如果确定SQL语法肯定没错的话应该就是下一种可能了
可能性二:字段名
SQL报错的可能有两种,一个就是上面所说的SQL语法有误,另一个可能就是你查询语句的字段名是mysql保留的关键字,可以去官这篇博客查看Mysql 关键字及保留字,这个问题的话修改表中字段值名即可。
🥂MyBatis时报错
🥝问题引入
想要在MyBatis中完成对指定表的指定字段的指定顺序进行排序,这么一看就需要传三个参数供mapper映射文件接收。于是我写了一个mapper接口、mapper映射文件动态拼接SQL语句、一个测试类,运行测试类出现以下报错。
我的代码
这里因为是MyBatis的多参数SQL,于是在对应的mapper接口中使用@Param注解将多个参数一一对应,否则会报错
🍉问题解决
可能性一:就是我的问题所在
使用#{ }的方式传参的话,MyBatis会对其进行预编译以防SQL注入问题,导致运行的SQL语句中这些传过来的参数都会加上单引号,就像是这个形式
select * from 'product_info' order by 'p_id' 'desc'
而这种SQL语句的运行是有问题的,我们需要的是不带单引号的SQL语句。这时我们可以使用${ }的方式传参,会将传过来的参数直接拼接到SQL语句上,但是无法避免SQL注入
select * from product_info order by p_id desc
这样就可以正常运行了
可能性二:sql语法
先检查一下你的SQL语法是不是书写错误,最简单的方法就是将你的SQL语句用具体的值替换掉#{ }引用,复制粘贴到Navicat中的查询中进行运行,看看是否能够正常运行且是自己想要的结果,如果报错的话就检查SQL语法,确保SQL语法没有错误的话可能就是下面的问题
可能性三:字段名
Navicat查询报错的可能有两种,一个就是上面所说的SQL语法有误,另一个可能就是你查询语句的字段名是mysql保留的关键字,可以去官这篇博客查看Mysql 关键字及保留字,这个问题的话修改表中字段值名即可,如果还不是的话很抱歉不能帮到你😣