【问题标题】:Parsing and modification of SQL statements in JavaJava中SQL语句的解析和修改
【发布时间】:2010-08-20 12:17:16
【问题描述】:

有谁知道 Java 中的 SQL 语句解析器,它允许 SQL 查询的对象表示,允许修改此表示并生成更新的 SQL 语句?

问候, 克里斯托夫

【问题讨论】:

  • 出于好奇:您为什么要这样做?我们可能会提出替代方案。
  • 我支持@Peter Tillemans 的问题。也许有一种方法可以预先创建对象树表示,做任何你想做的事情,只将其转换为 SQL 作为最终导出执行。
  • 我在 JDBC 驱动程序级别工作(我想)以捕获我的应用程序发送的 SQL 语句,但我想部分重写这些语句(例如修改一些表名)。

标签: java sql parsing model


【解决方案1】:

我认为ANTLR 能够做到这一点。

【讨论】:

  • 我想是的,但我一直在寻找一个比方说更简单的解决方案。使用 ANTLR,我仍然需要自己生成解析器,实际上,如果 SQL ANSI 语法与 ANTLR v3 兼容,我没有找到相关信息。不确定是否可以更新模型并生成回 SQL 字符串。
  • 我对 ANTLR 不是很熟悉。我很确定你可以更新模型。重新生成 SQL 字符串应该是最直接的树遍历和打印,并且 ANTLR 有一个叫做“字符串模板”的东西可以提供帮助。是的,如果您使用 ANTLR,您可能需要做一些工作才能获得结果。您应该在 ANTLR 网站上询问。
  • 一些迟到的反馈... ANTLR 绝对是解决这个问题的方法。我将 SQL 语法与 ANTLR v2 一起使用。我修改了语法以记录持有“表”ASTNode 的标记并更改了它们的值。
【解决方案2】:

也许你可以看看JSqlParser

【讨论】:

  • 我也找到了那个。是否可以更改 SQL 模型并取回重写的 SQL,目前还不是很清楚。也许 toString() 可以完成这项工作。
【解决方案3】:

这是demo use Java SQL Parser 做这样的事情:

输入 SQL:

SELECT A as A_Alias, B AS B_Alias FROM TABLE_X

如果您需要从选择列表中删除第二列“B AS B_Alias”,只需执行以下操作:

columns.removeResultColumn(1); // 0 is the first column

然后你会得到这个新的 SQL( , 被自动删除了):

SELECT A as A_Alias FROM TABLE_X

本演示还演示了如何替换列、添加条件(where 子句)、添加 Order by 子句等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多