上一篇使用antlr解析的,发现不行,官方提供的语法文件bug太多,多到不能用的程度,还是得用专门的开源库。这次选jsqlparser了。
从github下载一个源码,mvn package 打一个jar包。将jsqlparser-0.9.6.jar拷贝到工作目录。
import java.util.*;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.util.TablesNamesFinder;
public class ParserTest {
public static void main(String[] args){
System.out.println("Hello World!");
String sql = "select NVL( (SELECT 1 FROM DUAL), 1) AS A from TEST1,test";
try{
Select selectStatement = (Select) CCJSqlParserUtil.parse(sql);
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List tableList = tablesNamesFinder.getTableList(selectStatement);
for(String s : tableList) {
System.out.println(s);
}
}catch(Exception e){
String sql1 = " TEST1";
//e.printStacktrace();
}
}
}
这是调用解析table name的代码。
编译运行
javac -cp ./jsqlparser-0.9.6.jar ParserTest.java
java -cp .:./jsqlparser-0.9.6.jar:$CLASSPATH ParserTest
还挺好用。
上一篇: 用antlr生成Python语言的mysql语法解析器
下一篇: 使用druid解析sql
0 Responses so far.