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

📅 发布时间:2026/7/11 6:08:45 👁️ 浏览次数:
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
解决Spring Boot中MySQL数据库报错“Bad SQL Grammar”的问题目录解决Spring Boot中MySQL数据库报错“Bad SQL Grammar”的问题问题描述解决步骤解决方案结论附MySql常用配置参数及使用场景在使用Spring Boot连接MySQL数据库时有时候会遇到“Bad SQL Grammar”错误这种错误通常在执行SQL语句时发生。本文针对的是对于执行多条SQL语句的情况。问题描述出现错误的SQL语句如下delete idtruncateUserInfo 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连接配置中添加allowMultiQueriestrue参数允许一次执行多个SQL语句。找到项目的application.yml或application.properties文件添加如下配置datasource: master: url: jdbc:mysql://your-mysql-url:3306/your-database?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltruenullCatalogMeansCurrenttrueallowMultiQueriestrue # 其他配置项...这里的关键是在url参数中添加了allowMultiQueriestrue。这个配置项允许MyBatis执行多个SQL查询语句以’;分隔。结论通过在MySQL连接配置中添加allowMultiQueriestrue参数我们成功解决了执行多条SQL语句时出现的“Bad SQL Grammar”错误。这种配置的使用对于一些特殊的SQL语句执行场景非常有帮助但需要谨慎使用确保SQL语句的合法性和安全性。附MySql常用配置参数及使用场景MySQL连接配置中有一些常用的参数这些参数可以在数据库连接字符串URL中进行配置。以下是一些常见的MySQL连接参数及其使用场景和作用url作用指定数据库的连接地址。使用场景必须配置用于指定MySQL数据库的连接地址。driver-class-name作用指定数据库驱动类的全限定名。使用场景必须配置用于加载MySQL数据库的JDBC驱动。username作用指定连接数据库的用户名。使用场景必须配置用于指定数据库连接的用户名。password作用指定连接数据库的密码。使用场景必须配置用于指定数据库连接的密码。useSSL作用是否使用SSL加密连接。使用场景在需要安全传输数据的情况下配置为false或者在不需要SSL加密的本地开发环境中配置为false。serverTimezone作用指定服务器时区。使用场景在使用JDBC连接MySQL时如果发生时区错误可以通过此参数指定服务器时区以解决时区不匹配的问题。allowPublicKeyRetrieval作用是否允许使用非加密连接时获取服务器RSA公钥。使用场景配置为true表示允许配置为false表示不允许。nullCatalogMeansCurrent作用NULL数据库/表名解析方式。使用场景在一些特殊情况下当NULL被解释为使用当前catalog数据库时配置为true配置为false时可能会抛出异常。此配置主要应对一些脚本或代码中使用NULL作为表名或列名的情况。allowMultiQueries作用是否允许执行多个SQL查询语句(以’;分隔)。使用场景当需要在一个SQL语句中执行多个以分号分隔的查询时配置为true。默认为false,只允许单个查询语句。此配置主要用于支持在 Mapper XML 文件中编写包含多个语句的 SQL 映射,或者在一个 Java 方法中执行多个语句。autoReconnect* **作用** 是否自动重新连接。 * **使用场景** 在网络不稳定的情况下配置为true可以使连接断开时自动尝试重新连接。maxReconnects* **作用** 在自动重新连接模式下尝试重新连接的最大次数。 * **使用场景** 配置自动重新连接时可以指定最大尝试次数。useUnicode* **作用** 是否使用Unicode字符集。 * **使用场景** 在需要支持Unicode字符集的情况下配置为true。这些连接参数可以根据具体的需求进行配置确保数据库连接的安全性和性能。在不同的场景中可以灵活选择和调整这些参数以满足应用程序的要求。