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.properties
或application.yml
文件中,添加或确认存在以下配置:spring.datasource.platform=mysql
-
验证结果:
更新配置后,重新运行定时任务,确认数据库更新操作不再抛出异常,统计信息更新功能恢复正常。 -
后续建议:
- 定期审查和测试数据库相关的配置,确保其与使用的数据库类型匹配。
- 在开发过程中,特别是在涉及数据库操作时,增加单元测试和集成测试,及时发现并修复此类问题。
记录人
Leo
记录时间
[2024/7/6]
状态
已解决