@Test public void testSqlParser() throws SQLSyntaxErrorException { String sql = "select t.name, t.id, (select p.name from post p where p.id = t.post_id)" + "from acct t where t.id = 10 and exists (select r.id from role r where r.id = t.role_id) "; String dbType = "mysql"; System.out.println("原始SQL 為 : " + sql); String result = SQLUtils.format(sql, dbType); System.out.println(result); SQLSelectStatement statement = (SQLSelectStatement) parser(sql, dbType); SQLSelect select = statement.getSelect(); SQLSelectQueryBlock query = (SQLSelectQueryBlock) select.getQuery(); // 這里新增的條件,如果語法不正確會報錯。如果條件不正確,需要執行了sql后才會報錯。 query.addCondition("name like 'admin%'"); SQLExprTableSource tableSource = (SQLExprTableSource) query.getFrom(); String tableName = tableSource.getExpr().toString(); System.out.println("獲取的表名為 tableName :" + tableName); //修改表名為acct_1 tableSource.setExpr("acct_1"); System.out.println("修改表名后的SQL 為 : [" + statement.toString() + "]"); } public SQLStatement parser(String sql, String dbType) throws SQLSyntaxErrorException { List<SQLStatement> list = SQLUtils.parseStatements(sql, dbType); if (list.size() > 1) { throw new SQLSyntaxErrorException("MultiQueries is not supported,use single query instead "); } return list.get(0); }