`
lp895876294
  • 浏览: 284721 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Druid中sql解析

    博客分类:
  • DB
 
阅读更多

基于druid解析查询sql,在JDBC API基础上进行插件开发的时候需要。

import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
import com.alibaba.druid.util.JdbcUtils;

public class SQLParseTest {

    public static void main(String args[]){
        String sql = " select eventId,eventKey,eventName,flag from event where eventId = ? and eventKey = ? and eventName = ?";
        //使用mysql解析
        MySqlStatementParser sqlStatementParser = new MySqlStatementParser(sql) ;
        //解析select查询
        SQLSelectStatement sqlStatement = sqlStatementParser.parseSelect() ;
        SQLSelect sqlSelect = sqlStatement.getSelect() ;
        //获取sql查询块
        SQLSelectQueryBlock sqlSelectQuery = (SQLSelectQueryBlock)sqlSelect.getQuery() ;

        StringBuffer out = new StringBuffer() ;
        //创建sql解析的标准化输出
        SQLASTOutputVisitor sqlastOutputVisitor = SQLUtils.createFormatOutputVisitor(out , null , JdbcUtils.MYSQL) ;

        //解析select项
        out.delete(0, out.length()) ;
        for (SQLSelectItem sqlSelectItem : sqlSelectQuery.getSelectList()) {
            if(out.length()>1){
                out.append(",") ;
            }
            sqlSelectItem.accept(sqlastOutputVisitor);
        }
        System.out.println("SELECT "+out) ;

        //解析from
        out.delete(0, out.length()) ;
        sqlSelectQuery.getFrom().accept(sqlastOutputVisitor) ;
        System.out.println("FROM "+out) ;

        //解析where
        out.delete(0, out.length()) ;
        sqlSelectQuery.getWhere().accept(sqlastOutputVisitor) ;
        System.out.println("WHERE "+out);

    }

}

 

分享到:
评论

相关推荐

    java使用druid进行sql解析,可解析出物理表,外层投影列对应的物理表和字段

    本篇文章将详细探讨如何在Java中利用Druid进行SQL解析,以及如何通过解析获取到物理表和外层投影列所对应的物理表和字段。 首先,我们需要了解Druid的基本概念。Druid是一个开源项目,最初由阿里巴巴贡献,其主要...

    提取Druid的SQL解析器

    认识 Druid  Druid 是阿里巴巴...  Druid SQL 解析器  Druid 作为一个数据库连接池,功能很多,但我接触 Druid 的时候,却不是因为它有世界上好的数据库连接池实现。而是因为有些开源项目(比如,mycat),借用了

    Druid SQL解析.pdf

    Druid 是阿里巴巴公司开源的一个数据库连接池,它的口号是:为监控而生的数据库连接池。...Druid 是一个 JDBC 组件库,包括数据库连接池、SQL Parser 等组件,DruidDataSource 是最好的数据库连接池。

    基于Druid的SqlParser模块解析create table语句创建java POJO和DAO类的效率工具.zip

    SqlParser是Druid中的一个核心组件,用于解析SQL语句。它基于词法分析和语法分析的原理,将SQL语句转换为抽象语法树(AST),从而方便对SQL进行深度处理。通过这个模块,开发者可以轻松获取SQL的结构信息,例如表名...

    Druid SQL解析器的解析过程

    这篇文尝试近距离地探究 Druid SQL 解析器如何工作。  Demo 代码  以这份代码为例 /** * * * @author beanlam * @date 2017年1月10日 下午11:06:26 * @version 1.0 * */ public class ParserMain { ...

    Druid Sql解析理解及使用入门.pdf

    sql Druid Sql解析理解及使用入门.pdf

    高效SQL变更追踪工具 - DbTracer,基于MyBatis与Druid的Java源码解决方案

    该项目集成了MyBatis插件机制和Druid SQL解析功能,为数据变更的跟踪提供了一种高效且便捷的方式。 技术构成: - 主要编程语言:Java - 文件组成:共计42个文件,包括: - Java源文件:26个 - XML配置文件:7个 ...

    druid sql 样例

    druid sql 的描述文件,可快速上手

    druid案例

    Druid是阿里巴巴开源的一个强大、灵活且全面的数据库连接池组件,它不仅提供了数据库连接池功能,还集成了数据库监控、SQL解析、性能分析等多种高级特性。在这个“druid案例”中,我们将深入探讨Druid的核心功能及其...

    SSM框架druid连接池,sql server数据库

    3. **强大的过滤器体系**:Druid支持SQL解析,可以统计SQL执行的耗时,拦截异常SQL,以及进行SQL格式化等操作。 4. **配置灵活**:Druid提供了丰富的配置选项,可以满足各种应用场景的需求。 在使用Druid与SQL ...

    ssm+druid+sqlserver

    Druid包含了SQL解析、执行计划可视化、Web监控等功能,是许多大型系统首选的数据源组件。 在SSM框架中,Druid数据源的配置通常会包含以下几部分: 1. 添加依赖:在项目的pom.xml文件中,添加Druid的相关依赖库。 2...

    通过解析sql语句获取表血缘关系项目

    在IT行业中,数据库管理和数据...总结来说,"通过解析SQL语句获取表血缘关系项目"是一个关键的数据管理实践,它依赖于对SQL的深入理解和合适的工具,以揭示数据库中的数据流动路径,从而支持更高效、更合规的数据操作。

    druid-1.1.6 源码包

    1. SQL解析:Druid能解析SQL语句,提供SQL统计和优化功能,帮助开发者了解系统中的SQL执行情况,找出性能瓶颈。 2. 监控与日志:Druid提供丰富的监控统计功能,包括连接池状态、SQL执行统计等,并可以通过扩展适配...

    druid-1.1.12jar

    总之,Druid作为一个强大的数据库连接池组件,不仅提供了基础的连接管理功能,还增加了监控、SQL解析等高级特性,是Java开发中不可或缺的工具。在1.1.12这个版本中,它继续保持着稳定性和高性能,是许多企业和开发者...

    springBoot+druid+mybatis+redis+logback

    Druid是阿里巴巴开源的一个数据库连接池组件,它提供了监控、SQL解析、连接池等功能。在SpringBoot项目中,Druid可以作为数据源,提供高效的连接管理和性能监控,如SQL执行时间、连接状态等。此外,Druid还支持Web...

    sql-parser:druidSQL Parser简单举例

    在`Druid`中,SQL解析器`DruidSQL Parser`是一个强大的工具,可以将SQL语句转换为抽象语法树(AST),方便进行SQL分析和优化。下面我们将深入探讨`DruidSQL Parser`的使用和相关知识点。 首先,`DruidSQL Parser`是...

    Druid源码(druid-1.2.8.tar.gz)

    它提供了监控、SQL解析、执行性能统计等多种功能,广泛应用于各种Java企业级项目中。Druid-1.2.8版本源码的分析可以帮助我们深入理解其内部机制,从而更好地优化数据库访问性能。 在Druid源码中,我们可以重点关注...

    druid&ojdbc jar包

    - **SQL解析**:Druid支持SQL解析,可以分析SQL语句的执行计划,帮助优化SQL性能。 - **拦截器机制**:通过自定义拦截器,可以实现如SQL日志、连接池健康检查等功能。 - **扩展性**:Druid设计时考虑了扩展性,允许...

    druid连接池源码和jar包下载

    4. **强大的SQL解析器**:Druid的SQL解析器支持复杂SQL语句的解析,能对SQL进行预处理和优化。 5. **扩展性**:Druid设计了Filter机制,允许用户自定义拦截器,扩展其功能,如日志记录、性能统计等。 **2. 使用...

    mycat路由解析之Druid开发指南.docx

    根据官方提供的数据,`druidparser`在处理SQL解析时的性能通常可以比`fdbparser`快5倍以上,在某些情况下甚至可以达到10倍以上的速度提升。对于长度较长的SQL查询,这种性能差距更为明显,最高可达40倍左右。 #####...

Global site tag (gtag.js) - Google Analytics