Springboot后端开发中的SQL报错

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+"%")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个流行的 Java 框架,它简化了构建生产级 RESTful Web 应用和服务的流程。后端数据传输主要涉及将HTTP请求与数据库交互,以及在客户端和服务器之间交换数据。在 Spring Boot ,数据传输通常通过以下几个关键组件来实现: 1. **Controller**:Spring Boot 的 Controller 是应用的入口点,负责处理HTTP请求。你可以使用 `@RestController` 或 `@GetMapping`, `@PostMapping` 等注解来定义 API 接口,这些接口通常会调用服务层(Service)的方法来处理业务逻辑。 2. **Service**:Service 层负责业务逻辑的处理,包括数据访问(通过Repository或JPA)和数据转换。它可以使用 `@Autowired` 注解注入DAO或者Repository来进行数据库操作。 3. **Repository/DataSource**:Repository 是对数据库操作的抽象,Spring Data JPA 或 MyBatis 等持久化框架提供对各种数据库的抽象,使得开发者可以使用CRUD方法与数据库交互而无需关心具体的SQL语句。 4. **Model/DTO**:Model(如Entity)代表数据库的实体对象,而 DTO(Data Transfer Object)则是从数据库获取数据后用来在不同层次间传输的轻量级对象,它们可能包含更简洁或过滤后的属性。 5. **序列化/反序列化**:使用如Jackson、Gson或Spring MVC的内置支持,将Java对象转换为JSON或XML格式进行HTTP响应,反之亦然。 6. **RESTful原则**:遵循RESTful设计原则,如使用HTTP方法(GET、POST、PUT、DELETE)表示资源的操作,状态码(如200成功、404未找到)用于表示请求结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值