java使用druid解析器解析SQL語句


    @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);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM