Java的SQL解析器库

时间:2009-03-19 00:21:14

标签: java sql parsing

是否有用于解析SQL语句的开源Java库?

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

如果没有,严格遵守SQL标准也没关系。

更新:我需要两件事:

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

7 个答案:

答案 0 :(得分:49)

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

ANTLR4有SQL grammar

答案 1 :(得分:32)

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

答案 2 :(得分:10)

分析器

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

处理特定于供应商的SQL

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

答案 3 :(得分:7)

General SQL Parser for Java不是开源的,但正是您所关注的。

答案 4 :(得分:6)

尝试Zql

答案 5 :(得分:3)

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

JSqlParser也是一个不错的选择。虽然它在解析oracle pl / sql时有一些bug(或者一些未实现的功能)。 请参阅其论坛了解详情。

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

答案 6 :(得分:2)

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

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