环境 jdk 8 PostgreSQL 10.1 postgresql(驱动) 9.4.1212.jre7
SQL select '[1,2,3]'::jsonb ?| array['1']
在psql中可以正常运行,结果
f (1 row)
测试代码
String sql = "select '[1,2,3]'::jsonb ?| array['1']";
String dbType = JdbcConstants.POSTGRESQL;
String result = SQLUtils.format(sql, dbType);
异常内容 16:26:50.813 [main] WARN com.alibaba.druid.sql.SQLUtils - format error com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'3]'::jsonb ?| array['1']',expect QUES, actual QUES jsonb at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:230) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:324) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:120) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:115) at com.alibaba.druid.sql.SQLUtils.toStatementList(SQLUtils.java:216) at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:229) at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:224) at org.beiyu.study.parser_test.DruidParserTest.main(DruidParserTest.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) select '[1,2,3]'::jsonb ?| array['1']
请确认下是否为bug,谢谢!
原提问者GitHub用户beiyu
ruid的SQLUtils中提供了对于PostgreSQL的支持,但是在解析JSONB操作时似乎出现了问题。具体来说,您的SQL语句select '[1,2,3]'::jsonb ?| array['1']可以在psql中正常执行,但是在使用Druid的SQLUtils解析时却出现了语法错误。
这个问题可能是由于Druid的SQLUtils对于PostgreSQL的JSONB操作支持不完善,导致解析出现问题。为了解决这个问题,您可以尝试以下几个方法:
使用更高版本的Druid:Druid是一个开源的Java数据库连接池和SQL解析库,如果您使用的是较老的Druid版本,可能存在一些已知的问题。您可以尝试升级到最新版本的Druid,以获得更好的兼容性和稳定性。
自定义解析器:如果您遇到了Druid无法解析的SQL语句,您可以尝试自定义解析器,以便Druid可以正确解析该语句。具体来说,您可以通过扩展Druid的SQLParser和SQLSelectParser类来实现自定义解析器。您可以在自定义解析器中添加对于PostgreSQL的JSONB操作的支持,以便Druid可以正确解析该语句。
使用其他的SQL解析库:如果Druid无法解析您的SQL语句,您可以尝试使用其他的SQL解析库。例如,ANTLR是一个流行的开源的语法解析器生成器,可以用于解析SQL语句。您可以尝试使用ANTLR来解析PostgreSQL的JSONB操作,以替代Druid。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。