zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    作业三
    源代码版本管理与项目管理软件的认识与github的注册
    每周更新的学习进度表
    电脑四则运算出题
    软件工程问题
    自我介绍
    2016.2.14-2016.2.21 中大信(北京)工程造价咨询有限公司实习有感
    《软件工程》课程总结
    结对编程项目---四则运算
    作业三:代码规范、代码复审、PSP
  • 原文地址:https://www.cnblogs.com/se7end/p/14122810.html
Copyright © 2011-2022 走看看