开发者社区> 问答> 正文

syntax error, expect RPAREN, actual COLONCOLON pos

SQL语句包含::,使用 PagerUtils 时,抛出下面的异常

Exception in thread "main" com.alibaba.druid.sql.parser.ParserException: syntax error, expect RPAREN, actual COLONCOLON pos 61, line 1, column 60, token COLONCOLON at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:2856) at com.alibaba.druid.sql.parser.SQLExprParser.methodRest(SQLExprParser.java:1419) at com.alibaba.druid.sql.parser.SQLExprParser.dotRest(SQLExprParser.java:1356) at com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerExprParser.dotRest(SQLServerExprParser.java:131) at com.alibaba.druid.sql.parser.SQLExprParser.primaryRest(SQLExprParser.java:1008) at com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerExprParser.primaryRest(SQLServerExprParser.java:120) at com.alibaba.druid.sql.parser.SQLSelectParser.parseWhere(SQLSelectParser.java:624) at com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerSelectParser.query(SQLServerSelectParser.java:172) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:358) at com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerSelectParser.select(SQLServerSelectParser.java:57) at com.alibaba.druid.sql.parser.SQLStatementParser.parseSelect(SQLStatementParser.java:2562) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:248) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:171) at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:492) at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:487) at com.alibaba.druid.sql.PagerUtils.limit(PagerUtils.java:81) at com.example.test.utils.AlibabaDruid.main(AlibabaDruid.java:17)

SQL

select * from test where shape.STIntersects(geometry::STGeomFromText('POLYGON ((86610.054 86610.054,112372.95799999963 88785.5940000005,112372.91199999955 88675.996999999508,86610.054 86610.054))',0))=1;

原提问者GitHub用户cn-wwl

展开
收起
山海行 2023-07-05 19:18:38 873 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    这个错误syntax error, expect RPAREN, actual COLONCOLON表示Druid在解析SQL语句时,报错预期右括号。
    这说明Druid使用的JsqlParser无法正确解析此SQL语句。然后通过修改、简化SQL语法、升级Druid版本等手段来解决这个错误。

    2023-07-30 20:00:13
    赞同 展开评论 打赏
  • 根据你提供的异常信息,看起来是由于SQL语句中使用了双冒号"::"的语法,而导致Druid解析器无法正确解析该语句。异常信息中指出了在语句的第1行第60列处遇到了"COLONCOLON"标记,但解析器期望的是"RPAREN"(右括号)标记。

    双冒号"::"在某些数据库中通常用于类型转换或指定数据类型的操作符,但在Druid解析器中,该语法可能不受支持或需要特殊处理。

    2023-07-11 09:16:58
    赞同 展开评论 打赏
  • 目前的解决方案是 采取替换特殊字符的形式,将::替换成COLONCOLON ,接着使用PagerUtils.limit(),生成好分页sql,再将COLONCOLON 替换成::,最后再去执行。

    原回答者GitHub用户cn-wwl

    2023-07-06 10:51:44
    赞同 展开评论 打赏
  • 这个异常是由于SQL语句中的"::"引起的。在SQL Server中,"::"用于调用某些内置函数或特定类型的方法。然而,在一些SQL解析器中,例如PagerUtils使用的Alibaba Druid,它无法正确地解析和处理这种语法。

    要解决这个问题,你可以尝试以下几种方法之一:

    1. 将SQL语句中的"::"替换为对应的SQL Server函数或方法的标准调用方式,以便与解析器兼容。例如,将geometry::STGeomFromText()替换为STGeomFromText(geometry)

    2. 不使用PagerUtils,而是通过其他方式实现分页。你可以自己编写代码来处理分页逻辑,或者使用其他支持SQL Server语法的查询构建工具。

    请注意,以上建议可能需要根据你正在使用的数据库和工具进行相应的调整。还建议查阅相关文档和资源,以了解更多关于特定解析器和工具的限制和建议。

    2023-07-05 19:38:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载