就目前而言,这个问题并不适合我们的Q&A格式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或广泛的讨论。如果你觉得这个问题可以改进,并可能重新开放,visit the help center的指导。
11年前关闭。
有没有一个开源的Java库来解析SQL语句?
如果可能,它应该是可定制的或足够灵活的,以便能够解析(或至少忽略)特定于供应商的语法(例如Oracle表空间定义或MySQL的LIMIT子句)。
如果没有,严格遵守SQL标准也是可以的。
**更新:**我需要它做两件事:
- 为非SQL数据库提供SQL接口(Map到内部API调用)
- 在进入实际数据库之前重写SQL(例如甲骨文)
7条答案
按热度按时间vnjpjtjt1#
ANTLR3具有可用的ANSI SQL语法。您可以使用它来创建自己的解析器。
ANTLR4有一个SQL grammar。
hec6srdp2#
91zkwejq3#
解析器
如果你需要一个解析器,在Apache Derby的代码库中应该有一个解析器。
处理特定于供应商的SQL
您可能希望查看jdbcConnection对象上的.native()方法,您可以向它传递供应商中立的查询,这些查询将被后处理为供应商特定的查询。
6qfn3psc4#
General SQL Parser for Java不是开源的,但正是你所关注的。
ygya80vv5#
试试看
5lhxktic6#
Hibernate使用ANTLR进行sql和hql解析。
JSqlParser也是一个很好的选择。尽管它在解析oracle pl/sql时有一些bug(或一些特性没有实现)。详情请见论坛。
因此,如果您正在解析oracle pl/sql,建议使用ANTLR。
ao218c7q7#
你想用解析后的SQL做什么?我可以推荐几个Lex/Yacc(BYACC/J,Java Cup)的Java实现,您可以使用现有的SQL语法。
如果您真的想对解析后的语法做些什么,我建议您查看Derby,这是一个用Java编写的开源SQL数据库。