【问题标题】:Parser to parse an SQL query and return the column name's and the corresponding table name in Java [duplicate]解析器解析 SQL 查询并在 Java 中返回列名和相应的表名 [重复]
【发布时间】:2011-06-15 06:27:27
【问题描述】:

可能重复:
SQL parser library for Java

我需要一个解析器,它应该以格式返回列名及其对应的表名

列名表名

最好是一个 java 库,因为我不想深入到 SQL 解析的所有细微差别,它可以使实现更容易。

问候,

【问题讨论】:

  • SQL查询中有多个列怎么办?是否要用 CRLF 分隔?
  • 已经有a question asked on this topic了,怎么又问了?
  • @ vineet 这个问题是较早提出的,要求较低。我已经检查了 ZQL 库,实际上当获得了将列名与表名匹配的新要求时,我已经对其进行了应用。这样做的目的是让老问题保持原样,因为这个问题以最好的方式得到了回答。并将这个稍微高级的要求放在一个不同的问题中,仅此而已。
  • 恐怕同样的答案会成立。为此,您不需要与已经建议的 API/库不同的 API/库。
  • 就像我在 duffymo 的回答中建议的那样。使用 ANTLR,您需要挂钩到解析器的适当部分,以收集此信息,以便您可以返回所需的结构。不那么重要的事实是,如果所有解析器都能理解语法,他们都会解析您的输入。解决方案的重要部分是您是否可以挂钩解析器并存储状态。

标签: java sql parsing sdk


【解决方案1】:

如果你有一个到数据库的连接,你可以使用准备好的语句来做到这一点:

String sql = "....";
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSetMetaData meta = pstmt.getMetaData();

然后您可以使用ResultSetMetaData.getColumnCount()getColumnName(int) 来检索列名。如果您的 JDBC 驱动程序支持它,您甚至可以使用 getTableName(int) 获取底层表名

请注意,并非所有驱动程序都支持在实际执行语句之前获取元数据,您需要使用正在使用的驱动程序对其进行测试。

【讨论】:

    【解决方案2】:

    好问题! 我刚刚进行了一些谷歌搜索,发现了以下有趣的参考资料:

    SQL parser library for Java

    http://www.gibello.com/code/zql/

    http://www.sqlparser.com/sql-parser-java.php

    我希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2021-09-26
    • 2021-08-20
    相关资源
    最近更新 更多