check the manual that corresponds to your MySQL server version f

举报
扎哇太枣糕 发表于 2022/06/15 11:35:41 2022/06/15
【摘要】 ​         首先判断自己是在什么情况下报的错,如果是MyBatis的SQL报错的话,建议直接点击目录跳转到MyBatis时SQL报错,避免浪费时间。如果本文能够对你有所帮助的话,还请在评论区多多支持目录🍻运行SQL语句、SQL文件等报错🥂MyBatis时SQL报错🍻运行SQL语句、SQL文件等报错🍖问题分析        一般这种问题都是有两种可能(如果你的问题不是这两种,欢...

         首先判断自己是在什么情况下报的错,如果是MyBatis的SQL报错的话,建议直接点击目录跳转到MyBatis时SQL报错,避免浪费时间。如果本文能够对你有所帮助的话,还请在评论区多多支持

目录

🍻运行SQL语句、SQL文件等报错

🥂MyBatis时SQL报错


🍻运行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 关键字及保留字,这个问题的话修改表中字段值名即可,如果还不是的话很抱歉不能帮到你😣

你的问题有没有得到解决?到下方评论区交流一下吧⇩ ⇩ ⇩

 最后最后祝愿大家,一辈子不要再见到一个bug!!!! 

编辑


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。