开发者社区> 问答> 正文

SQLUtils.formatSQLServer格式化“ALTER TABLE”结果错误

原始SQL: ALTER TABLE kpiTarget ADD deleted tinyint DEFAULT 0 预期格式化后:ALTER TABLE kpiTarget\n\tADD deleted tinyint DEFAULT 0 用druid格式化:ALTER TABLE kpiTarget ADD (deleted tinyint DEFAULT 0) 已经明显改变了语义。 druid版本:1.1.6 (2018.1.30更新最新版也是一样)

原提问者GitHub用户renxiaoyao

展开
收起
山海行 2023-07-05 20:33:16 66 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    使用Druid对SQL语句进行了格式化,但是发现格式化后的语句与预期的不同,导致语义发生了变化。具体来说,您的SQL语句是ALTER TABLE kpiTarget ADD deleted tinyint DEFAULT 0,预期格式化后的结果是ALTER TABLE kpiTarget\n\tADD deleted tinyint DEFAULT 0,但是使用Druid格式化后的结果是ALTER TABLE kpiTarget ADD (deleted tinyint DEFAULT 0),与预期的不同。

    这个问题可能是由于Druid的SQL格式化规则不兼容您的SQL语句导致的。为了解决这个问题,您可以尝试以下几个方法:

    修改SQL语句:您可以尝试修改SQL语句,以避免Druid格式化出现问题。具体来说,您可以将ADD deleted tinyint DEFAULT 0修改为ADD COLUMN deleted tinyint DEFAULT 0,以避免Druid将其解析为添加一个包含deleted tinyint DEFAULT 0的子句。

    自定义Druid格式化规则:Druid是一个开源的Java数据库连接池和SQL解析库,您可以尝试自定义Druid的SQL格式化规则,以兼容您的SQL语句。具体来说,您可以通过扩展Druid的SQLASTOutputVisitor类来实现自定义格式化规则,以适应您的SQL语句。

    使用其他的SQL格式化库:如果Druid无法正确格式化您的SQL语句,您可以尝试使用其他的SQL格式化库。例如,SQL Formatter是一个流行的开源的SQL格式化库,可以用于格式化SQL语句。您可以尝试使用SQL Formatter来格式化您的SQL语句,以替代Druid。

    2023-07-30 14:12:09
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

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

相关电子书

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