有大量的sql语句需要解析,要求提取出表名。用正则表达式好像不太好,里面有一些较复杂的语句。想用sql解析器来解析,生成一棵语法树,提取出表名就可以了,这样结果也准确些。
我用了gsp(General SQL Parser,http://www.sqlparser.com)。但是平均解析一条语句要173ms,速度上有些慢了。gsp里面也没有一些选项,可以关闭某些特性,提高解析速度,因为我只要表名就可以了。各位有什么好的方法吗?开源库最好是java版的。
我用了gsp(General SQL Parser,http://www.sqlparser.com)。但是平均解析一条语句要173ms,速度上有些慢了。gsp里面也没有一些选项,可以关闭某些特性,提高解析速度,因为我只要表名就可以了。各位有什么好的方法吗?开源库最好是java版的。
那你可以把这些表名放在数组里,然后循环indexOf判断下
问题是我找的gsp有点慢了,或者是我不知道它内部有哪些参数,可以优化。
大致想了下几种情况,大家补充。
from table1
from table1 tb1
from table1, table2
from table1 tb1, table2 tb2
from table1, table2 tb2
...
解析这样的字符串应该不麻烦吧。
select * from 表名
insert into 表名
delete from 表名
update 表名
select * from 表名 inner(left\right) join 表名
truncate table 表名
drop table 表名其他的我想不出来了。总结一下,我觉得比研究什么语法树简单多了吧。
可以在jvm参数中加上 -Doracle.jdbc.Trace=true 就可以记录数据库操作了。
我现在还要用 c 从sql 中提取表名,奋斗中~