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);
        }
  • 相关阅读:
    为什么很多程序员都选择跳槽?
    程序员牛人跳槽
    批处理学习教程
    linux操作命令
    apache配置访问限制
    不常见使用的css
    input中的内容改变时触发的事件
    order by 特殊排序技巧
    CSS设置input placeholder文本的样式
    GoodUI:页面布局的技巧和设计理念
  • 原文地址:https://www.cnblogs.com/se7end/p/14122810.html
Copyright © 2011-2022 走看看