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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架