开发者社区> 问答> 正文

1.1.0中sql加分号解析的问题

新版本中按照如下方式解析后的sql全部无法执行: OracleStatementParser parser=new OracleStatementParser(allSql); List stmtList=parser.parseStatementList(); for(SQLStatement stmt : stmtList) { st = connOracle.createStatement(); System.out.println(stmt.toString()); st.execute(stmt.toString()); }

sql输出的文本正常,但执行全部报ORA-00911: 无效字符,发现是sql文本最后如果加‘;’则会报错,在之前版本加不加';'都是可以正常解析和执行的,希望恢复到旧版本的功能,向下兼容!

之前场景是用上面语句解析多条sql,比如: select 1 from t1; select 2 from t2; select 3 from t3; 多语句之间不管加不加‘;’,只是单纯的换行都可以正常解析;新版本中则解析多行语句直接报错,每行结尾必须去掉‘;’才可以解析,用户已经习惯sql结束后用';'结束,之前版本可以兼容二者,希望能恢复先前版本。

原提问者GitHub用户zzx8170

展开
收起
山海行 2023-07-05 20:53:10 81 0
3 条回答
写回答
取消 提交回答
  • 在 Druid 1.1.0 版本中,对于 SQL 语句的解析存在一个问题,即在某些情况下语句末尾添加分号会导致解析错误。这导致了你在之前版本中可以正常解析和执行的多行 SQL 语句,在新版本中却无法执行。

    为了解决这个问题,你可以尝试以下方法:

    1. 在每个 SQL 语句结尾去掉分号:在使用新版本的解析器时,将每个 SQL 语句的末尾分号去掉,然后再进行解析和执行。例如,将 select 1 from t1; 修改为 select 1 from t1

    2. 回退到旧版本:如果你希望恢复到旧版本的功能,可以回退到之前版本的 Druid,以保持向下兼容。你可以查找并下载适合你需求的旧版本,然后将其引入到项目中使用。

    请注意,回退到旧版本可能会导致失去一些新版本中的修复和改进。因此,在执行回退操作之前,建议你仔细评估影响并谨慎决策。

    另外,如果这个问题对你的业务有较大影响,你也可以向 Druid 社区报告该问题,以便他们能够意识到这个问题并考虑在未来的版本中修复。

    2023-07-30 14:35:13
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在 Druid Spring Boot Starter 1.1.0 版本中,Druid 数据源默认会对 SQL 语句进行语法解析和校验,并且会在 SQL 语句末尾自动添加分号(;)。这样做的目的是为了遵循 SQL 标准,并且可以保证 SQL 语句的执行顺序正确。

    然而,这种默认行为可能会导致一些应用程序出现兼容性问题,特别是对于某些数据库或驱动程序版本。在您的情况下,似乎 Oracle 数据库不支持在 SQL 语句末尾添加分号(;),因此导致了执行 SQL 语句时出现了 ORA-00911 错误。

    2023-07-30 13:13:21
    赞同 展开评论 打赏
  • 新版本已经发布,看下面这里例子的是否满足你的需求

    https://github.com/alibaba/druid/blob/f2708bb208a8e4d2139b2c6a9ca71ec632483d8a/src/test/java/com/alibaba/druid/demo/sql/Demo_for_issue_1815.java

    原回答者GitHub用户wenshao

    2023-07-06 11:47:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

相关镜像