org.springframework.jdbc.BadSqlGrammarException异常

Bug 记录

概述

在执行定时任务更新电子书统计信息时,遇到了 org.springframework.jdbc.BadSqlGrammarException 异常,具体表现为 SQL 函数 count 被错误地解析为自定义函数 wiki.count,导致数据库更新操作失败。

详细描述
  • 错误信息

    org.springframework.jdbc.BadSqlGrammarException: 
    ### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: FUNCTION wiki.count does not exist.
    ### The error may exist in file [E:\projectSpace\wiki\backed\wiki\target\classes\mapper\DocMapperCust.xml]
    ### The error occurred while setting parameters
    ### SQL: update ebook t1, (select ebook_id, count (1) doc_count, sum (view_count) view_count, sum (vote_count) vote_count from doc group by ebook_id) t2 set t1.doc_count = t2.doc_count, t1.view_count = t2.view_count, t1.vote_count = t2.vote_count where t1.id = t2.ebook_id
    ### Cause: java.sql.SQLSyntaxErrorException: FUNCTION wiki.count does not exist.
    
  • 受影响文件

    • E:\projectSpace\wiki\backed\wiki\target\classes\mapper\DocMapperCust.xml
  • 相关代码片段

    update ebook t1, (select ebook_id, count (1) doc_count, sum (view_count) view_count, sum (vote_count) vote_count from doc group by ebook_id) t2
    set t1.doc_count = t2.doc_count, t1.view_count = t2.view_count, t1.vote_count = t2.vote_count
    where t1.id = t2.ebook_id
    
  • 错误分析
    该问题由数据库方言配置不当引起,导致标准 SQL 函数 count 被错误解析为用户自定义函数,进而引发语法错误。

解决方案
  • 修正措施

    • 确认并更新 Spring Boot 项目的数据库方言配置,确保使用正确的 MySQL 方言。
    • application.propertiesapplication.yml 文件中,添加或确认存在以下配置:
      spring.datasource.platform=mysql
      
  • 验证结果
    更新配置后,重新运行定时任务,确认数据库更新操作不再抛出异常,统计信息更新功能恢复正常。

  • 后续建议

    • 定期审查和测试数据库相关的配置,确保其与使用的数据库类型匹配。
    • 在开发过程中,特别是在涉及数据库操作时,增加单元测试和集成测试,及时发现并修复此类问题。
记录人

Leo

记录时间

[2024/7/6]

状态

在这里插入图片描述

已解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱跑步的程序员~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值