<statement> or DELIMITER expected, got..

img


试了各种方法解决不了,可以正常运行。但是会报错。之前写动态sql语句没有报错,今天好像不知道哪里的设置改了就一直报错。

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


在自定义 Springboot xml 的 update 语句中,逗号的表示方式与普通 SQL 语句中一样,直接使用英文逗号 "," 即可。例如,下面是一个使用自定义 update 语句的 Springboot xml 示例:

<update id="updateUser">
    UPDATE user
    SET name=#{name}, age=#{age}, email=#{email}
    WHERE id=#{id}
</update>

在这个示例中,使用了英文逗号来分隔 SET 语句中的多个字段。如果字段中本身就有逗号,可以使用单引号或双引号将其包裹起来来避免语法错误。例如:

<update id="updateUser">
    UPDATE user
    SET address='New York, USA', phone='123-456-789'
    WHERE id=#{id}
</update>

【以下回答由 GPT 生成】

对于这个问题,你遇到了一个语法错误。根据你提供的信息,错误信息是"or DELIMITER expected, got 'status'"。这个错误通常发生在动态SQL语句的语法中,意味着在解析SQL语句时出了问题。

根据你提供的SQL代码,在<if>标签中使用status=#{status},时出现了错误。这是因为在动态SQL中,逗号是用于分隔每个条件的,并且当它是最后一个条件时不需要逗号。然而,在你的代码中,<if>标签中的最后一个条件status=#{status},被不必要地跟了一个逗号,导致语法错误。

要解决这个问题,你只需要删除该条件后面的逗号就可以了。修改后的代码如下所示:

<update id="update" parameterType="Employee">
    UPDATE employee
    <set>
        <if test="name != null">name=#{name},</if>
        <if test="username != null">username=#{username},</if>
        <if test="password != null">password=#{password},</if>
        <if test="phone != null">phone=#{phone},</if>
        <if test="sex != null">sex=#{sex},</if>
        <if test="idNumber != null">id_number=#{idNumber},</if>
        <if test="updateTime != null">update_time=#{updateTime},</if>
        <if test="updateUser != null">update_user=#{updateUser},</if>
        <if test="status != null">status=#{status}</if> <!-- 注意这里逗号的删除 -->
    </set>
    WHERE id=#{id}
</update>

修改后的代码中删除了最后一个条件status=#{status},后面的逗号,这样就修复了语法错误。以上就是对这个问题的解决方法,希望能帮助到你。如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^