CCJSqlParserUtil ——SQL语法解释器
SQL解析样例
简单的语句解析
-
单个语句
-
String sql = "SELECT * FROM TABLE1"; //方法1 Statement statement = CCJSqlParserUtil.parse(sql); //方法2 CCJSqlParser ccjSqlParser = new CCJSqlParser(sql); Statement statement = ccjSqlParser.Statement();
-
多个语句
-
String sqls = "SELECT * FROM TABLE1;SELECT * FROM TABLE2"; //方法1 Statements statements = CCJSqlParserUtil.parseStatements(sqls); //方法2 CCJSqlParser ccjSqlParser = new CCJSqlParser(sqls); Statements statements = ccjSqlParser.Statements(); List<Statement> statementList = statements.getStatements();
-
Statement
类代表SQL语句的叙述整体。
简单的表达式解析
-
//表达式 Expression expression = CCJSqlParserUtil.parseExpression("a+b*c"); //条件表达式 Expression expression = CCJSqlParserUtil.parseCondExpression("A='123'");
-
Expression
类代表表达式。
从SQL中提取表名
-
String sql = "SELECT * FROM TABLE1"; Statement statement = CCJSqlParserUtil.parse(sql); TablesNamesFinder tablesNamesFinder = new TablesNamesFinder(); List<String> tableList = tablesNamesFinder.getTableList(statement);
-
TablesNamesFinder
类可以提取Statement
类中的表名列表。
将别名应用于所有表达式
-
Select select = (Select) CCJSqlParserUtil.parse("SELECT A,B,C FROM TABLE1");//此处的运行时类是Select SelectBody selectBody = select.getSelectBody(); AddAliasesVisitor addAliasesVisitor = new AddAliasesVisitor(); addAliasesVisitor.setPrefix("B");//设置前缀(如不进行设置默认为“A”) selectBody.accept(addAliasesVisitor); System.out.println(selectBody.toString());//SELECT A AS B1, B AS B2, C AS B3 FROM TABLE1
向SELECT添加一列或表达式
-
Select select = (Select) CCJSqlParserUtil.parse("SELECT A FROM TABLE1"); SelectUtils.addExpression(select, new Column("B")); System.out.println(select);//SELECT A, B FROM TABLE1
-
其中
Column
类代表列,SelectUtils
类是SELECT语句工具类。