0

我为mysql编写了一个数据库中间件。我需要确定一个 sql 语句 isRead 语句或 isWrite 语句并提取模式和表信息。我通过谷歌找到的一些解析器只解析 DML 语句。但是我需要一个解析器可以解析mysql服务器可以做的所有语句。

你认为我直接在java中调用mysql解析器是个好主意还是有可能?

4

2 回答 2

0

你认为我直接在java中调用mysql解析器是个好主意还是有可能?

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

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

于 2012-11-11T07:42:32.150 回答
0

您可能需要考虑使用来自阿里巴巴Druid 项目的代码。虽然设计为一个复杂的连接池库,但该项目支持非常高级的解析器和 AST,用于 ANSI SQL 和非 ANSI 方言,如 MySQL、Oracle、SQL Server 等。该项目是开源的,并具有非常自由的 Apache 许可证版本2.0。

这部分库的主要入口点是SQLUtils.java

于 2017-03-19T21:16:03.583 回答