几种基于Java的SQL解析工具的比较与调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了几种基于Java的SQL解析工具的比较与调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3173字,纯文字阅读大概需要5分钟。
内容图文
1、sqlparser
http://www.sqlparser.com/
优点:支持的数据库最多,除了传统数据库外还支持hive和greenplum一类比较新的数据库,调用比较方便,功能不错
缺点:收费,500$起
2、Apache Calcite
一个构建JDBC或者ODBC访问数据库的框架,通过自定义一些adapter通过sql访问任意类型的数据
优点:开源
缺点:sql解析只是一小部分功能,且只支持通用的文法树,无法对不同数据库提供本地化支持
3、druid
阿里的一个开源项目,其实是个JDBC,但是可以通过这个JDBC统计通过它提交的各种sql执行情况等信息,对提交sql进行监控统计
主页:https://github.com/alibaba/druid
我们用到的SQL-Parser是它的一个组件:
https://github.com/alibaba/druid/wiki/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 package parse; 2 3 import java.util.Iterator; 4 import java.util.List; 5 import java.util.Map; 6 import java.util.Set; 7 8 import com.alibaba.druid.sql.SQLUtils; 9 import com.alibaba.druid.sql.ast.SQLStatement; 10 import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; 11 import com.alibaba.druid.stat.TableStat.*; 12import com.alibaba.druid.stat.*;14import com.alibaba.druid.util.JdbcConstants; 151617publicclass testparse { 1819publicstaticvoid main(String[] args) { 2021 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; 3334//格式化输出35 String result = SQLUtils.format(sql, dbType); 36 System.out.println(result); // 缺省大写格式37 List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType); 3839//解析出的独立语句的个数40 System.out.println("size is:" + stmtList.size()); 41for (int i = 0; i < stmtList.size(); i++) { 4243 SQLStatement stmt = stmtList.get(i); 4445 PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); 46 stmt.accept(visitor); 47 Map<String, String> aliasmap = visitor.getAliasMap(); 48for (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<Column> groupby_col = visitor.getGroupByColumns(); 53// 54for (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<Name, TableStat> tabmap = visitor.getTables(); 61for (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 } 7172 } 7374 }
原文:http://www.cnblogs.com/blueglass/p/6286814.html
内容总结
以上是互联网集市为您收集整理的几种基于Java的SQL解析工具的比较与调用全部内容,希望文章能够帮你解决几种基于Java的SQL解析工具的比较与调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。