用于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数据库。