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);
        }
  • 相关阅读:
    sql优化
    mysql_存储过程_后一行减去前一行
    python基础笔记
    atom使用markdown
    tensorboard遇到的坑
    WordPaster-Firefox浏览器控件安装方法
    WordPaster.exe安装教程
    Web大文件上传控件-bug修复-Xproer.HttpUploader6
    Web大文件下载控件更新-Xproer.HttpDownloader
    Web大文件上传控件-asp.net-bug修复-Xproer.HttpUploader6.2
  • 原文地址:https://www.cnblogs.com/se7end/p/14122810.html
Copyright © 2011-2022 走看看