在工作中遇到一个任务,需要读取.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