SQL parser library for Java [关闭]

mqxuamgl  于 2023-06-04  发布在  Java
关注(0)|答案(7)|浏览(191)

就目前而言,这个问题并不适合我们的Q&A格式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或广泛的讨论。如果你觉得这个问题可以改进,并可能重新开放,visit the help center的指导。
11年前关闭。
有没有一个开源的Java库来解析SQL语句?
如果可能,它应该是可定制的或足够灵活的,以便能够解析(或至少忽略)特定于供应商的语法(例如Oracle表空间定义或MySQL的LIMIT子句)。
如果没有,严格遵守SQL标准也是可以的。

**更新:**我需要它做两件事:

  • 为非SQL数据库提供SQL接口(Map到内部API调用)
  • 在进入实际数据库之前重写SQL(例如甲骨文)
vnjpjtjt

vnjpjtjt1#

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

hec6srdp

hec6srdp2#

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

91zkwejq3#

解析器

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

处理特定于供应商的SQL

您可能希望查看jdbcConnection对象上的.native()方法,您可以向它传递供应商中立的查询,这些查询将被后处理为供应商特定的查询。

6qfn3psc

6qfn3psc4#

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

ygya80vv

ygya80vv5#

试试看

  • Zql(原始Sourceforce)
  • Zql(Github)
  • Zql(Maven Central)
5lhxktic

5lhxktic6#

Hibernate使用ANTLR进行sql和hql解析。
JSqlParser也是一个很好的选择。尽管它在解析oracle pl/sql时有一些bug(或一些特性没有实现)。详情请见论坛。
因此,如果您正在解析oracle pl/sql,建议使用ANTLR。

ao218c7q

ao218c7q7#

你想用解析后的SQL做什么?我可以推荐几个Lex/Yacc(BYACC/JJava Cup)的Java实现,您可以使用现有的SQL语法。
如果您真的想对解析后的语法做些什么,我建议您查看Derby,这是一个用Java编写的开源SQL数据库。

相关问题