MySQL报语法错误,排查竟然花了一个钟!!!!

背景:最近协助远程同事开发一个功能,我调用同事写的接口,出现报错,影响和前端联调,同事正在处理其他事情,暂时无暇顾及。遂自行解决。查看日志现发一个inser语句报语法错误。

异常日志:

bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException:

异常解析:如果语句的语法不正确,数据库引擎会抛出一个“bad SQL grammar”错误

解决过程:
1、找到报错的日志,查看sql。如果没有,打开mybatis-plus日志输出。

2、将sql复制出来在mysql客户端模拟执行,发现sql亦报同样的错误。

3、遂仔细查看sql,核对数据库字段,类型,mapper文件,jav代码。未发现异常,大部分代码都是自动生成的,也不会出错。

4、花了将近一个小时,才破案:

sql如下:

INSERT INTO hb_test.test_001
(id, name, age, `desc`, source, create_time)
VALUES(1, 'aaa', 1, '1', '1', '2023-12-26 00:00:00');

重点就是 `desc` 字段。

desc是MySQL的保留字,一般不建议使用它。但是,如果您仍想将列名设置为“ desc”,则需要使用反引号。反引号表示法是(``)。

因此最后,给java代码设置TableField注解指定映射字段,如下,测试后insert正常执行。

 @TableField("`desc`")
 private String desc;

同时在xml的Base_Column_List字段列表中,也要给该字段加上反引号。一般情况下,这个自动生成的代码都会有。

<sql id="Base_Column_List">
id, name, age, `desc`, source, create_time
</sql>

 

posted @ 2023-12-26 11:18  下午喝什么茶  阅读(23)  评论(0编辑  收藏  举报