上一篇使用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 还挺好用。

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply