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


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

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

SQL Parser 模塊的介紹:

相關 API:

 

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