java解析SQL语句:druid

🐒个人主页:信计2102罗铠威

🏅JavaEE系列专栏

📖前言:

由于某个项目需要解析从前端传过来的SQL信息,我在网上找了好多方法,发现网上各种通过正则表达式解析SQL的代码,超级麻烦而且Bug还多,还有一个是JsqlParser,对想快速实现sql解析功能的小伙伴们入门不友好。最后我使用com.alibaba.druid依赖解析sql语句,特别简洁高效,在这里讲解一下~

🎀 maven依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.22</version>
        </dependency>

🎀 代码(后面是详解~)

   public static void main(String[] args) {
        String sql = "select a.prime_id, b.prime_id from adt_admit_discharges a full join mr_main b on a.visit_id = b.visit_id where a.visit_id is null";
        parse(sql);
    }
    public static void parse(String sql) {
        SQLStatementParser parser = new MySqlStatementParser(sql);
        SQLStatement sqlStatement = parser.parseStatement();
        MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
        sqlStatement.accept(visitor);
        //todo 上面四行就是对sql进行解析,然后存储到了visitor中(可以打断点跟踪一下)
        Map<TableStat.Name, TableStat> tables = visitor.getTables();//获取sql中的表名
        Collection<TableStat.Column> columns = visitor.getColumns();//获取sql中的列名【Column这个是重点】
        //打印操作
        List<String> allColumnName = new ArrayList<>();
        List<String> allTableName = new ArrayList<>();
        for (TableStat.Name t : tables.keySet()) {
            allTableName.add(t.getName());
        }
        for (TableStat.Column c : columns) {
            if (!c.isWhere()&&!c.isJoin()){//不是where和join的列字段打印出来
                allColumnName.add(c.getName());
            }
        }
        System.out.println(allTableName);//所有表名
        System.out.println(allColumnName);//不是where和join的列字段打印出来

    }

🎀 关于TableStat.Column的详解

这个是封装sql中出现的所有字段信息以及对应的表关系
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信计2102罗铠威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值