JSqlParser——SQL语法解释器:SQL解析样例

时间:2022-02-18 17:10:59

SQL解析样例

1.简单的语句解析

单个语句

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语句的叙述整体。

2.简单的表达式解析
//表达式
Expression expression = CCJSqlParserUtil.parseExpression("a+b*c");
//条件表达式
Expression expression = CCJSqlParserUtil.parseCondExpression("A='123'");

Expression类代表表达式。

3.从SQL中提取表名
String sql = "SELECT * FROM TABLE1";
Statement statement = CCJSqlParserUtil.parse(sql);
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(statement);

TablesNamesFinder类可以提取Statement类中的表名列表。

4.将别名应用于所有表达式
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
5.向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语句工具类。