用于Java的SQL解析器库

有没有一个开源的Java库来解析SQL语句?

如果可能的话,它应该是可定制的或足够灵活的,以便能够解析(或至少忽略)特定于供应商的语法(例如Oracle表空间定义或MySQL的LIMIT子句)。

如果没有,严格遵守SQL标准也没有问题。

更新:我需要这两件事情:

  • 为非SQL数据库提供SQL接口(映射到内部API调用)
  • 在写入实际数据库之前重写SQL(例如Oracle)

ANTLR3有一个ANSI SQL语法可用。 你可以使用它来创建你自己的解析器。

ANTLR4有一个SQL语法 。

  • JSqlParser
  • Presto的解析器是使用ANTLR4编写的,并有自己的不可变的AST类,它们是从解析器构建的。 AST有一个访问者和漂亮的打印机。

分析器

如果你需要一个解析器,应该在Apache Derby的代码库中有一个解析器。

处理供应商特定的SQL

您可能想要查看jdbc Connection对象上的.native()方法,您可以将其供应商中性查询传递给供应商特定的查询。

SQL的一般SQL解析器不是开源的,但正是你正在寻找的。

试试Zql

Hibernate使用ANTLR进行sql和hql解析。

JSqlParser也是一个不错的选择。虽然它有一些错误(或一些功能没有实现),而解析Oracle PL / SQL。 看到它的论坛的细节。

所以如果你解析oracle pl / sql,建议使用ANTLR。

你想用解析的SQL做什么? 我可以推荐一些Lex / Yacc的Java实现( BYACC / J , Java Cup ),你可以使用现有的SQL语法。

如果你想用解析语法做一些事情,我可能会建议看看Derby ,一个用Java编写的开源SQL数据库。