是否有用于解析 SQL 语句的开源 Java 库?
如果可能的话,它应该是可定制的或足够灵活的,能够解析(或至少忽略)特定于供应商的语法(如 Oracle 表空间定义或 MySQL 的 LIMIT 子句)。
如果没有,严格遵守 SQL 标准也是可以的。
更新: 我需要它做两件事:
ANTLR3 有一个 ANSI SQL 语法可用,您可以使用它来创建自己的解析器。
ANTLR4有一个 SQL 语法。
您想对解析后的 SQL 做什么?我可以推荐一些可以使用现有 SQL 语法的 Lex/Yacc (BYACC/J,爪哇杯)的 Java 实现。
如果您希望对解析后的语法进行实际操作,我建议您查看用 Java 编写的开源 SQL 数据库 德比。
解析器
如果您需要一个解析器,那么在 阿帕奇・德比的代码库中应该有一个解析器。
处理特定于供应商的 SQL
您可能希望查看 jdbc Connection 对象上的 。本地()方法,您可以将与供应商无关的查询传递给它,这些查询将被后处理到特定于供应商的查询中。
试试 Zql
Hibernate 使用 ANTLR 进行 sql 和 hql 解析。
JSqlParser 也是一个很好的选择,尽管它在解析 oracle pl/sql 时有一些 bug (或者一些未实现的特性)。 详情请参阅论坛。
因此,如果要解析 oraclepl/sql,建议使用 ANTLR。
用于 Java 的通用 SQL 解析器不是开源的,但正是您所关注的。