news 2026/8/3 21:12:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决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 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.ymlapplication.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常用配置参数及使用场景

MySQL连接配置中有一些常用的参数,这些参数可以在数据库连接字符串(URL)中进行配置。以下是一些常见的MySQL连接参数及其使用场景和作用:

  1. url

    • 作用:指定数据库的连接地址。
    • 使用场景:必须配置,用于指定MySQL数据库的连接地址。
  2. driver-class-name

    • 作用:指定数据库驱动类的全限定名。
    • 使用场景:必须配置,用于加载MySQL数据库的JDBC驱动。
  3. username

    • 作用:指定连接数据库的用户名。
    • 使用场景:必须配置,用于指定数据库连接的用户名。
  4. password

    • 作用:指定连接数据库的密码。
    • 使用场景:必须配置,用于指定数据库连接的密码。
  5. useSSL

    • 作用:是否使用SSL加密连接。
    • 使用场景:在需要安全传输数据的情况下配置为false,或者在不需要SSL加密的本地开发环境中配置为false
  6. serverTimezone

    • 作用:指定服务器时区。
    • 使用场景:在使用JDBC连接MySQL时,如果发生时区错误,可以通过此参数指定服务器时区,以解决时区不匹配的问题。
  7. allowPublicKeyRetrieval

    • 作用:是否允许使用非加密连接时获取服务器RSA公钥。
    • 使用场景:配置为true表示允许,配置为false表示不允许。
  8. nullCatalogMeansCurrent

    • 作用:NULL数据库/表名解析方式。
    • 使用场景:在一些特殊情况下,当NULL被解释为使用当前catalog(数据库)时,配置为true;配置为false时,可能会抛出异常。此配置主要应对一些脚本或代码中使用NULL作为表名或列名的情况。
  9. allowMultiQueries

    • 作用:是否允许执行多个SQL查询语句(以’;'分隔)。
    • 使用场景:当需要在一个SQL语句中执行多个以分号分隔的查询时,配置为true。默认为false,只允许单个查询语句。此配置主要用于支持在 Mapper XML 文件中编写包含多个语句的 SQL 映射,或者在一个 Java 方法中执行多个语句。
  10. autoReconnect

* **作用:** 是否自动重新连接。 * **使用场景:** 在网络不稳定的情况下,配置为`true`可以使连接断开时自动尝试重新连接。
  1. maxReconnects
* **作用:** 在自动重新连接模式下,尝试重新连接的最大次数。 * **使用场景:** 配置自动重新连接时,可以指定最大尝试次数。
  1. useUnicode
* **作用:** 是否使用Unicode字符集。 * **使用场景:** 在需要支持Unicode字符集的情况下,配置为`true`。

这些连接参数可以根据具体的需求进行配置,确保数据库连接的安全性和性能。在不同的场景中,可以灵活选择和调整这些参数以满足应用程序的要求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 21:12:32

flask-django基于python的高考调档线查询系统的设计与实现

目录系统架构设计数据采集与处理后端实现前端实现数据库设计部署方案测试计划项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用前后端分离架构&#xff0c;后端使用Flask或Django框架…

作者头像 李华
网站建设 2026/7/21 6:15:18

50+功能模块的外卖点餐小程序平台单店二合一商业运营版

温馨提示&#xff1a;文末有资源获取方式一套优秀的外卖点餐系统&#xff0c;绝不仅仅是简单的“下单工具”。它应该是门店的线上总指挥部、是营销活动的执行中心、是财务数据的分析室、更是连接顾客的桥梁。全新发布的外卖点餐小程序平台单店二合一商业运营版&#xff0c;经过…

作者头像 李华
网站建设 2026/7/21 6:17:12

1000w+ 数据,查询速度提升60倍,SQL 优化就是这么神奇

有一张财务流水表&#xff0c;未分库分表&#xff0c;目前的数据量为9555695&#xff0c;分页查询使用到了limit&#xff0c;优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms)&#xff0c;按照下文的方式调整SQL后&#xff0c;耗时347 ms (execution…

作者头像 李华
网站建设 2026/7/21 6:15:25

多组学之蛋白组—生物标志物的发现

生物标志物可以在早期诊断过程中及时发现病症&#xff0c;进而在早期进行干预治疗&#xff0c;从而使治疗更有效[1]。生物标志物也可以用于预后的监测&#xff0c;及时评估治疗的效果。蛋白组是生物标志物发现的重要来源。因为蛋白组最大程度决定了表型的多样性。翻译后修饰可以…

作者头像 李华
网站建设 2026/7/21 6:15:08

什么机构海南落户最专业靠谱?2026 海南落户全攻略测评!

本文将深入探讨2026年海南落户的相关政策和流程&#xff0c;评测不同机构的专业性与可靠性。我们将为您提供详细的信息&#xff0c;以帮助您选择最合适的落户机构&#xff0c;确保您的落户申请顺利进行。无论是材料准备、政策解读还是实操经验&#xff0c;我们都将一一盘点&…

作者头像 李华