赞
踩
出现错误的SQL语句如下:
<delete id="truncateUserInfo">
truncate table sys_user;
truncate table sys_user_info;
truncate table sys_role_info;
</delete>
执行这个SQL语句时,可能会抛出BadSqlGrammarException
,错误信息如下:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'truncate table sys_user_info;
truncate table sys_role_info' at line 2
### The error may exist in file [...\CUserInfoMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: truncate table sys_user; truncate table sys_user_info; truncate table sys_role_info;
### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'truncate table sys_user_info;
truncate table sys_role_info' at line 2
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'truncate table sys_user_info;
truncate table sys_role_info' at line 2
同时,上层代码中调用该SQL语句的方法如下:
this.baseMapper.truncateUserInfo();
首先确认SQL语句本身没有问题,并且该代码在其他项目中可以正常运行。确保底层SQL与上层调用的代码都没有逻辑问题,所以“bad SQL grammar []”应该是由配置文件导致的,检查项目的application.yml
文件中的MySQL连接配置参数
这种错误通常是因为MySQL默认情况下不允许一次执行多个SQL语句,而这里的SQL语句包含了多个truncate
语句。解决方案是在MySQL连接配置中添加allowMultiQueries=true
参数,允许一次执行多个SQL语句。
找到项目的application.yml
或application.properties
文件,添加如下配置:
datasource:
master:
url: jdbc:mysql://your-mysql-url:3306/your-database?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&allowMultiQueries=true
# 其他配置项...
这里的关键是在url
参数中添加了&allowMultiQueries=true
。这个配置项允许MyBatis执行多个SQL查询语句(以’;'分隔)。
通过在MySQL连接配置中添加allowMultiQueries=true
参数,我们成功解决了执行多条SQL语句时出现的“Bad SQL Grammar”错误。这种配置的使用对于一些特殊的SQL语句执行场景非常有帮助,但需要谨慎使用,确保SQL语句的合法性和安全性。
MySQL连接配置中有一些常用的参数,这些参数可以在数据库连接字符串(URL)中进行配置。以下是一些常见的MySQL连接参数及其使用场景和作用:
url:
driver-class-name:
username:
password:
useSSL:
false
,或者在不需要SSL加密的本地开发环境中配置为false
。serverTimezone:
allowPublicKeyRetrieval:
true
表示允许,配置为false
表示不允许。nullCatalogMeansCurrent:
true
;配置为false
时,可能会抛出异常。此配置主要应对一些脚本或代码中使用NULL作为表名或列名的情况。allowMultiQueries:
true
。默认为false,只允许单个查询语句。此配置主要用于支持在 Mapper XML 文件中编写包含多个语句的 SQL 映射,或者在一个 Java 方法中执行多个语句。autoReconnect:
true
可以使连接断开时自动尝试重新连接。maxReconnects:
useUnicode:
true
。这些连接参数可以根据具体的需求进行配置,确保数据库连接的安全性和性能。在不同的场景中,可以灵活选择和调整这些参数以满足应用程序的要求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。