上一篇使用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.