You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用出现SQL命令未正确结束错误的解决方法

解决Spring Boot中SQL「SQL command not properly ended」错误的方案

1. 修正LIKE语句的参数绑定方式

原SQL中%:query%的写法不符合JDBC参数绑定规范,部分驱动或ORM框架无法正确解析,可通过两种方式调整:

  • 代码层拼接通配符:在Java代码中给query参数前后添加%,SQL中仅保留LIKE :query:

    SELECT * 
    FROM ACTIONS 
    WHERE (var1 LIKE :query OR var2 LIKE :query) AND (ACTION IN :actions OR :length = 0) AND (code = :code)
    

    代码示例:query = "%" + inputQuery + "%"

  • SQL函数拼接:使用数据库原生拼接函数处理通配符,MySQL/Oracle可使用CONCAT:

    SELECT * 
    FROM ACTIONS 
    WHERE (var1 LIKE CONCAT('%', :query, '%') OR var2 LIKE CONCAT('%', :query, '%')) AND (ACTION IN :actions OR :length = 0) AND (code = :code)
    

2. 修复IN子句的集合参数解析

如果:actions是集合类型(如List),需根据ORM框架调整写法:

  • MyBatis场景:必须用<foreach>标签遍历集合生成占位符,不能直接写IN :actions:
    <select id="queryActions" resultType="com.example.entity.Actions">
      SELECT * 
      FROM ACTIONS 
      WHERE (var1 LIKE CONCAT('%', #{query}, '%') OR var2 LIKE CONCAT('%', #{query}, '%')) 
      AND (ACTION IN 
          <foreach collection="actions" item="action" open="(" separator="," close=")">
              #{action}
          </foreach>
          OR #{length} = 0) 
      AND (code = #{code})
    </select>
    
  • JPA原生SQL场景:确保参数用@Param("actions")标注,集合类型正确传递,部分JPA实现需将集合转为逗号分隔字符串适配语法。

3. 排查参数与数据库兼容性问题

  • 检查:length参数:若为数值类型,避免传递null,可改为COALESCE(:length, 0) = 0处理空值场景。
  • 确认数据库版本变化:若数据库从MySQL切换到Oracle等,需适配新数据库的语法规则(如Oracle对空值、字符串拼接的要求更严格)。

4. 直接验证SQL语法完整性

将参数替换为实际值,在数据库客户端执行SQL(例如把:query换成'test',:actions换成('ACT1','ACT2')),排查是否存在语法错误,定位具体问题点。

内容的提问来源于stack exchange,提问作者sayedali musavi Khoeini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:15:34