我为mysql编写了一个数据库中间件。我需要确定sql语句、isRead语句或isWrite语句,并提取模式和表信息。我通过google找到的一些解析器只能解析DML语句。但我需要一个解析器可以解析mysql服务器所能做的所有语句。
你认为我直接在java中调用mysql解析器是个好主意,还是可行呢?
发布于 2012-11-11 15:42:32
你认为我直接在java中调用mysql解析器是个好主意,还是有可能呢?
不,我不认为这是个好主意。从Java中调用C/ C++代码并不是一个好主意。在这种情况下,解析器嵌入到一大堆其他代码中,并且很可能能够将其分离出来。最重要的是,它将解析树作为复杂的原生数据结构发出,这将很难在Java中使用。
一种更好的方法是采用现有的用于SQL的开源Java解析器,并(随着时间的推移)添加对特定于MySQL语句的解析支持。
发布于 2017-03-20 05:16:04
你可能会考虑使用阿里巴巴Druid project中的代码。尽管该项目被设计为一个复杂的连接池类库,但它支持ANSI SQL和非ANSI方言(如MySQL、Oracle、SQL Server等)的非常高级的parser and AST。
库的这一部分的主要入口点是SQLUtils.java。
https://stackoverflow.com/questions/13329040
复制相似问题