用 Druid 解析 sql 语句

在工作中遇到一个任务,需要读取.sql文件中的sql语句,对其进行分析,比如,得到这条sql语句是对哪个表进行什么操作,该操作有没有相应的where语句等。这其实是一个对sql语句进行词法分析、语法分析的过程。如果认真研究,那会是大学所学的编译原理的内容了。

在此,为了完成任务,我在网上找了一圈,发现在解析sql语法上,有两个常用的工具:

1. sqlparser

此工具应该是很强大的,本人没用过,因为要收费=_=

具体可以参考官网 :http://www.sqlparser.com/

2. Druid

Druid 是阿里巴巴的开源项目,免费,也是本文想讲的工具。

本文主要是本人在实践中总结出来的关于此工具的用法,如有纰漏,请评论指正。

本人也力求通过这一篇文章,就可以让读者能快速掌握此sql解析工具的实战。

 

利用 Druid 解析 sql语法  

首先在项目中得引入jar包,maven如下:

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

Druid是一个数据源,解析sql语法 ,只是里面一个小小功能而已。

废话不多说,直接看具体的常用操作~

 

一、格式化sql语句

格式化sql语句,具体是把sql中的关键字变成大写,如下代码:

    @Test
    public void testFormatMysql(){
        String sql = "insert into table_test_1 select * from table_test_2;";
        String result = SQLUtils.format(sql, JdbcConstants.MYSQL);
        System.out.println("格式化后输出:\n" + result);
    }

输入结果如下:

格式化后输出:
INSERT INTO table_test_1
SELECT *
FROM table_test_2;

这对于后续处理还是比较重要的,因为sql的关键字,大小写并不敏感,通过这个方法就可以把关键字统一变成大写。

 

二、获取表名和操作

    @Test
    public void testGetTableNameAndOperation(){
        String sql = "SELECT * FROM table_test_1;";
//        String sql = "insert into table_test_1 select * from table_test_2;";
        MySqlStatementParser parser = new MySqlStatementParser(sql);
        SQLStatement sqlStatement = parser.parseStatement();
        M
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值