Java的SQL解析器库 - 检索SQL语句中存在的表名列表

Mar*_*rte 2 java sql parsing

我正在寻找一个SQL库,它将解析SQL语句并返回SQL语句的某种Object表示形式.我的主要目标实际上是能够解析SQL语句并检索SQL语句中存在的表名列表(包括子查询,联接和联合).

我正在寻找一个商业友好的许可证库(例如Apache许可证).我正在寻找一个库而不是SQL语法.我不想构建自己的解析器.

到目前为止我能找到的最好的是JSQLParser,他们给出的例子实际上非常接近我正在寻找的东西.然而,它无法解析太多好的查询(DB2数据库),我希望找到一个更可靠的库.

Nic*_*rey 5

我怀疑你会找到任何可以使用的预先写好的东西.问题是ISO/ANSI SQL是一个非常复杂的语法 - 类似于超过600个生产规则IIRC.

Terence Parr的ANTLR解析器生成器(Java,但可以使用多种目标语言中的任何一种生成解析器)有几种可用的SQL语法,包括一对用于PL/SQL,一种用于SQL Server SELECT语句,一种用于mySQL,以及一种对于ISO SQL.

不知道他们是多么完整/正确/最新.

http://www.antlr.org/grammar/list


小智 5

你不需要重新发明轮子,那里已经存在这样一个可靠的SQL解析器库(它是商业的,而不是免费的),本文展示了如何检索SQL语句中存在的表名列表(包括子查询,联接和工会)这正是你要找的.

http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general-sql-parser/get-columns-and-tables-in-sql-script/

此SQL解析器库支持Oracle,SQL Server,DB2,MySQL,Teradata和ACCESS.