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);
        }
  • 相关阅读:
    c内存结构
    Linux普通文件和设备的异同点
    二分查找在字符串中的应用范例
    快排的一种相当简单但不算最快的实现方式
    C程序的存储空间布局
    exit与_exit
    /proc文件系统
    Linux下监控磁盘空间的四个命令
    linux下监控进程需掌握的四个命令
    linux终端下文件不同颜色的含义
  • 原文地址:https://www.cnblogs.com/se7end/p/14122810.html
Copyright © 2011-2022 走看看