2012-11-11 62 views
0

我为mysql编写一个数据库中间件。我需要确定一个sql语句isRead语句或isWrite语句并提取模式和表信息。我通过google发现的一些解析器只解析DML语句。但是我需要一个解析器可以解析mysql服务器可以执行的所有语句。有没有一个java解析器可以模拟mysql服务器解析器?

你认为这是一个好主意,我直接在java中调用mysql解析器或者可能吗?

+0

Google搜索将您的问题放在顶部;接下来的选择是http://sqlparser.com/ – Jayan

+0

它功能强大,但我认为它不是免费的。 – pythonee

+0

是的。顺便说一句,我添加了Java标记。希望这很好。 – Jayan

回答

0

你认为这是一个好主意,我直接在java中调用mysql解析器或者可能吗?

不,我不认为这是一个好主意。从Java调用C/C++代码很少是一个好主意。在这种情况下,解析器被嵌入到大量其他代码中,并且可能能够将其分离出来。最重要的是,它会将解析树作为难以在Java中使用的复杂本机数据结构发布。

更好的方法是将现有的开源Java解析器用于SQL,并随着时间的推移增加对解析MySQL特定语句的支持。

0

你可能要考虑使用阿里巴巴的Druid project的代码。虽然设计为复杂的连接池库,但该项目为ANSI SQL和非ANSI方言(如MySQL,Oracle,SQL Server等)提供了非常先进的parser and AST支持。该项目是开源的,并且支持非常自由的Apache许可版本2.0。

该部分图书馆的主要入口点是SQLUtils.java

相关问题