druid版本:
com.alibaba druid-spring-boot-starter 1.1.10 后端异常信息: Cause: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect RPAREN, actual IDENTIFIER pos 221, line 9, column 51, token IDENTIFIER integer :
SQL语句: select date_add(curdate(), interval(cast(help_topic_id as signed integer) - 1) day) gkey, 0 AS gvalue from mysql.help_topic where help_topic_id < day(last_day(curdate())) order by help_topic_id
MySQL版本为5.7
原提问者GitHub用户mallocxw
可能的原因是:
Druid配置错误
Druid使用的Lexer分析SQL文本时,出现错误。
SQL语句存在问题
SQL语句存在语法问题或错误,无法被正确解析。
Druid版本问题
部分早期版本的Druid存在Lexer分析器Bug,可能导致这类错误。
总的来说,token IDENTIFIER integer 错误主要是与Druid的Lexer有关,它负责解析和 tokenize SQL 语句。
出现这类错误通常说明:
Druid配置不当,导致Lexer分析错误
SQL语句存在语法问题
Druid版本存在Lexer Bug
要解决这个问题,主要需要做两步:
1.检查Druid配置是否正确
2.仔细检查SQL语句是否有语法问题
如果以上皆无问题,就有可能是Druid版本的Bug。
这个时候可以尝试:
升级到较新版本的Druid,修复Lexer分析器Bug
2.查看Druid issue tracker,看是否已有对应问题的报告
3.尝试修改Druid源码,修复Lexer相关的Bug
您的SQL语句中使用了"integer"作为标识符,但Druid解析器将其视为一个关键字,因此引发了错误。这可能是因为Druid解析器的版本较旧,不支持将"integer"作为标识符使用。
解决这个问题的一种方法是使用更新版本的Druid,因为更新的版本通常会修复解析器中的一些问题。您可以尝试升级Druid的版本,并再次尝试解析该SQL语句。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。