Springboot后端开发中的SQL报错
情况一:
报错图片:
Error updating database. Cause: java.sql.SQLSyntaxErrorException: XXX
发现问题:
SQL语句写错啦!!!英文和中文要特别小心,这里我就打成了中文的逗号,导致sql语句语法出错。
解决问题:
只需要修改上处为正确SQL语句即可。
引申思考:
除此之外,对于该问题还有需要特别注意的地方,如下:
1,检查数据库中的字段名与实体类中的字段名是否一致,特别要注意单词字母。
2,检查数据库中的字段是否与实体类中的字段一致。比如数据库中没有该字段,实体类中出现了就会报这个错。
3,检查连接的数据库是否正确,会不会是连接了另一个数据库。
4,由于数据库命名规范和Java命名规范不一致,可能会数据库字段和Java的实体类属性名字不统一,可以使用@Column注解来标识实体类中属性与数据表中字段的对应关系。
对于@Column注解的name属性:定义了被标注字段在数据库表中所对应字段的名称;
5、在反反复复的调试过程中并没有发现报错,并且返回的结果又不是期待结果。后面发现特别特别需要注意的是捕获异常不能轻易使用,因为如果语句或方法调用产生异常,会不再继续执行下面语句而直接捕获异常并返回自定义的结果。比如下处我就自定义返回了flase。当我SQL语句出错时,不会在控制台显示报错信息而是直接返回我自定义的false,并且调试也并不能发现问题所在。可以在确定了自己期待的测试用例正常运行后,再捕获一切异常不予注册,弥补自己没有考虑的情况。
6.建议在将SQL语句转入程序代码时,先将SQL语句赋值后放到MySQL数据库里检测能否运行。
情况二
报错图片:
在接下来的后端开发中,SQL语句转入程序代码前都会在msql数据库上测试。
**发现问题:**对于date相关的时间类型字段不允许以上处形式增加记录。
解决问题:
可以直接以正确的varchar形式给date类型字段插入数据。如下所示:
情况三
报错图片:
**发现问题:**对于date相关的时间类型字段调用STR_TO_DATE的内置函数去增加记录的参数str和参数format需要对应。
解决问题:
对于参数2是日期格式,形式必须和参数1保持一致,即:
如果参数1为’2023-05-05’,那么参数2需要为’%Y-%m-%d’。
如果参数1为’2023/05/05’,那么参数2需要为’%Y/%m/%d’。
如果参数1为’2023,05,05’,那么参数2需要为’%Y,%m,%d’。
情况四
报错图片:
发现问题:
没有正确分行,要十分注意转行后进行字符串拼接的SQL语句是否是正确的。
解决问题:
转行一定要特别小心
引申思考:
报错信息可能有:
1、Mysql错误:check the manual that corresponds to your MySQL server version for the right syntax【加 `符号、修改有冲突的字段名】
2、check the manual that corresponds to your MySQL server version for the right syntax错误【字段名用了关键字】 check the manual that corresponds to your MySQL server version for the right syntax to use near【where前多加了逗号】
3、Mysql异常check the manual that corresponds to your MySQL server version for the right syntax总结【sql是否有中文字符 、是否与关键字冲突、是否含特殊字符、是否正确分行】
情况五
报错图片:
在数据访问层@Select注解内使用动态SQL语句
**发现问题:**对于动态SQL语句的标签使用错误,test属性的值需要""或’'包裹。下方的test属性使用错误。
解决问题:
加上正确的 ‘’ 即可。
情况六
报错图片:
在数据访问层@Select注解内使用模糊查询语句
发现问题:
对于springboot的MyBatis-@select注解实现模糊查询不能采取下方这种方式,不能利用 ‘+’ 拼接。
解决问题:
方法一:使用CONCAT()函数实现字符串的拼接
方法二:在传入参数前,进行"%" + 参数 + "%"的字符串拼接。下处是例子:
@Select("select * from xxx where name like #{name} ")
List<xxx> findByName(String name)
在调用数据访问层接口时,对于要传入MyBatis的参数进行拼接字符串
userDao.findByName("%"+name+"%")