利用 druid 的 sql parser 模塊解析 sql 語句


druid 是阿里開源在 github 上面的數據庫連接池,里面有一個專門解析 sql 語句的模塊
 

源碼位置:

SQL Parser 模塊的介紹:

相關 API:

 

支持的數據庫類型:

理論上說,支持所有有jdbc驅動的數據庫。實際測試過的有

數據庫 支持狀態
mysql 支持,大規模使用
oracle 支持,大規模使用
sqlserver 支持
postgres 支持
db2 支持
h2 支持
derby 支持
sqlite 支持
sybase 支持
 

 

 

 

 

 

 

 

 

 

 

druid 使用說明:

druid 現在已經直接發布到了 maven 倉庫中,可以直接引用。
1、新建一個 maven 工程名為 sql_parser
 
2、在 pom.xml 文件中加入如下配置,當前最新使用 1.0.19
 
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.19</version>
</dependency>
 
 
3、 示例代碼,druid 的源碼中有豐富的測試代碼,具體路徑如下
src/test/java/com.alibaba.druid.bvt.sql.mysql.visitor/
下面的 App.java 參考的是 MySqlSchemaStatVisitorTest_Delete.java 這個源文件
package com.test.mvn.sql_parser;
 
import java.util.List;
 
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import com.alibaba.druid.util.JdbcConstants;
 
 
/**
 * Hello world!
 *
 */
public class App {
 
    public static void main(String[] args) {
 
        // String sql = "update t set name = 'x' where id < 100 limit 10";
        // String sql = "SELECT ID, NAME, AGE FROM USER WHERE ID = ? limit 2";
        // String sql = "select * from tablename limit 10";
 
        String sql = "select user from emp_table";
        String dbType = JdbcConstants.MYSQL;
 
        //格式化輸出
        String result = SQLUtils.format(sql, dbType);
        System.out.println(result); // 缺省大寫格式
        List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
 
        //解析出的獨立語句的個數
        System.out.println("size is:" + stmtList.size());
        for (int i = 0; i < stmtList.size(); i++) {
 
            SQLStatement stmt = stmtList.get(i);
            MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
            stmt.accept(visitor);
 
            //獲取表名稱
            System.out.println("Tables : " + visitor.getCurrentTable());
            //獲取操作方法名稱,依賴於表名稱
            System.out.println("Manipulation : " + visitor.getTables());
            //獲取字段名稱
            System.out.println("fields : " + visitor.getColumns());
        }
 
    }
 
}

返回的結果

Tables : emp_table
Tables : {emp_table=Select}
fields : [emp_table.user]

 

源碼編譯:

官方給的安裝方法:
但是我不開心。。。
因為編譯的時候會報一堆的錯誤,后來看了一下開發指南:
才找到方法,成功編譯,具體方法是跳過測試直接打包
mvn install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
這樣就會打包出一個快照版本的 druid jar 包,將這個jar 引入自己的測試程序就可以看看修改的情況了。
 
 
附:
我使用的引入方式是修改 setting 文件加入本地倉庫配置,使 druid編譯時直接將 jar 包放入本地倉庫,然后修改測試程序的 pom.xml 文件,加入如下配置
<dependency>
<
groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.19-SNAPSHOT</version> </dependency>
然后選擇項目-》Maven-》Update Project...
然后編譯運行就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM