日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java mysql 语句解析器_几种基于Java的SQL解析工具的比较与调用

發布時間:2023/12/1 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java mysql 语句解析器_几种基于Java的SQL解析工具的比较与调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、sqlparser

http://www.sqlparser.com/

優點:支持的數據庫最多,除了傳統數據庫外還支持hive和greenplum一類比較新的數據庫,調用比較方便,功能不錯

缺點:收費,500$起

2、Apache Calcite

一個構建JDBC或者ODBC訪問數據庫的框架,通過自定義一些adapter通過sql訪問任意類型的數據

優點:開源

缺點:sql解析只是一小部分功能,且只支持通用的文法樹,無法對不同數據庫提供本地化支持

3、druid

阿里的一個開源項目,其實是個JDBC,但是可以通過這個JDBC統計通過它提交的各種sql執行情況等信息,對提交sql進行監控統計

我們用到的SQL-Parser是它的一個組件:

支持數據庫不算少:

db2

mysql

odps

oracle

phoenix

postgresql

sqlserver

transact

不過部分語法支持還處于開發中,比如,不支持解析postgresql的begin/commit語法,不支持group by 1, 2這種指定字段的語法。。。-_||

編譯:

一開始懶得安裝maven使用javac編譯,結果出了一堆代碼中包含的中文編碼問題,花時間研究編碼不如乖乖下載安裝maven……-_-

在源碼根目錄下直接執行mvn:

mvn install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true

編譯后代碼目錄多出target子目錄,里面有class和代碼文件的jar包

調用很簡單

1 packageparse;2

3 importjava.util.Iterator;4 importjava.util.List;5 importjava.util.Map;6 importjava.util.Set;7

8 importcom.alibaba.druid.sql.SQLUtils;9 importcom.alibaba.druid.sql.ast.SQLStatement;10 importcom.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor;11 import com.alibaba.druid.stat.TableStat.*;12 import com.alibaba.druid.stat.*;

14 importcom.alibaba.druid.util.JdbcConstants;15

16

17 public classtestparse {18

19 public static voidmain(String[] args) {20

21 String sql= ""

22 + "insert into tar select * from boss_table bo, ("

23 + "select a.f1, ff from emp_table a "

24 + "inner join log_table b "

25 + "on a.f2 = b.f3"

26 + ") f "

27 + "where bo.f4 = f.f5 "

28 + "group by bo.f6 , f.f7 having count(bo.f8) > 0 "

29 + "order by bo.f9, f.f10;"

30 + "select func(f) from test1; "

31 + "";32 String dbType =JdbcConstants.POSTGRESQL;33

34 //格式化輸出

35 String result =SQLUtils.format(sql, dbType);36 System.out.println(result); //缺省大寫格式

37 List stmtList =SQLUtils.parseStatements(sql, dbType);38

39 //解析出的獨立語句的個數

40 System.out.println("size is:" +stmtList.size());41 for (int i = 0; i < stmtList.size(); i++) {42

43 SQLStatement stmt =stmtList.get(i);44

45 PGSchemaStatVisitor visitor = newPGSchemaStatVisitor();46 stmt.accept(visitor);47 Map aliasmap =visitor.getAliasMap();48 for (Iterator iterator =aliasmap.keySet().iterator(); iterator.hasNext();) {49 String key =iterator.next().toString();50 System.out.println("[ALIAS]" + key + " - " +aliasmap.get(key));51 }52 Set groupby_col =visitor.getGroupByColumns();53 //54 for (Iterator iterator =groupby_col.iterator(); iterator.hasNext();) {55 Column column =(Column) iterator.next();56 System.out.println("[GROUP]" +column.toString());57 }58 //獲取表名稱

59 System.out.println("table names:");60 Map tabmap =visitor.getTables();61 for (Iterator iterator =tabmap.keySet().iterator(); iterator.hasNext();) {62 Name name =(Name) iterator.next();63 System.out.println(name.toString() + " - " +tabmap.get(name).toString());64 }65 //System.out.println("Tables : " + visitor.getCurrentTable());66 //獲取操作方法名稱,依賴于表名稱

67 System.out.println("Manipulation : " +visitor.getTables());68 //獲取字段名稱

69 System.out.println("fields : " +visitor.getColumns());70 }71

72 }73

74 }

總結

以上是生活随笔為你收集整理的java mysql 语句解析器_几种基于Java的SQL解析工具的比较与调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。