自定义关键字_Java项目实践,如何获取自定义sql里的表名及关键字段
思路
用开源的druid解析 sql 语句。
druid 是阿里开源在github 上面的数据库连接池,里面有一个专门解析 sql 语句的模块。
支持的数据库类型:
理论上说,支持所有有jdbc驱动的数据库。
实际测试过的有mysql(大规模使用)、oracle(大规模使用)、sqlserver、postgres、db2、h2、derby、sqlite、sybase。
druid 使用说明:
druid 现在已经直接发布到了 maven 仓库中,可以直接引用。
1、新建一个 maven 工程名为 TestSqlParser
2、在 pom.xml 文件中加入如下配置,当前最新使用 1.2.3
com.alibaba druid 1.2.3
3、代码实例,以oracle为例:
import com.alibaba.druid.sql.SQLUtils;import com.alibaba.druid.sql.ast.SQLStatement;import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;import com.alibaba.druid.util.JdbcConstants;import java.util.List;public class TestSqlParser { 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,abc from emp_table order by c1 asc,c2 desc"; String dbType = JdbcConstants.ORACLE; //格式化输出 String result = SQLUtils.format(sql, dbType); System.out.println(result); // 缺省大写格式 List 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); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); stmt.accept(visitor); //获取表名称// System.out.println("Tables : " + visitor.getCurrentTable()); //获取操作方法名称,依赖于表名称 System.out.println("Manipulation : " + visitor.getTables()); //获取字段名称 System.out.println("fields : " + visitor.getColumns()); //获取排序名称 System.out.println("getOrderByColumns : " + visitor.getOrderByColumns()); //获取分组 System.out.println("getGroupByColumns : " + visitor.getGroupByColumns()); } }}
我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。
自定义关键字_Java项目实践,如何获取自定义sql里的表名及关键字段相关推荐
- SQL语句获取数据库名、所有表名、所有字段名及字段类型
SQL语句获取所有用户名,数据库名.所有表名.所有字段名及字段类型,方法来自于网上,稍加修改 1.获取所有用户名: SELECT name FROM Sysusers where status='2' ...
- SQL获取所有用户名,数据库名、所有表名、所有字段名及字段类型
SQL获取所有用户名,数据库名.所有表名.所有字段名及字段类型2009-03-14 10:481.获取所有用户名:SELECT name FROM Sysusers where status='2' ...
- oracle获取 表名,Oracle获取当前数据库的所有表名字段名和注释
获取所有的表名和标注释 SELECT a.TABLE_NAME,b.COMMENTS FROM all_tables a left join user_tab_comments b on a.TABL ...
- 自定义关键字_Java中的自定义异常
在测试脚本的编写中会需要使用自定义异常,通常可以很容易地用「Java」创建自定义异常类.它可以是已检查或未检查的异常.下面将演示一个简单的示例来检查Java中自定义异常的创建. 如何创建自定义异常类 ...
- VUEJS项目实践四之自定义键盘指令(按键即获取焦点)
上回书说到怎么在vue.js中添加bootstrap样式,这次来写一下键盘按键指令吧- 一.先来说一下vue.js本来就有的按键指令吧- 这个就灰常的简单和方便啦- 1.随便找一个vue页面文件,在& ...
- java 自定义 转换器_Java笔记之SpringMVC(七):自定义String到Date的类型转换器
0.说在前面 1.新建converter.jsp 转换器页面 日期: 提交 ${converteredDate } 2.新建ConverterController类 packagecom.spring ...
- java 创建自定义菜单_Java实现微信公众号自定义菜单的创建方法示例
本文实例讲述了Java实现微信公众号自定义菜单的创建方法.分享给大家供大家参考,具体如下: 开发公众号的时候可能需要给一些自定义菜单添加事件,比如点击某菜单然后服务端给用户推送信息. 我们也可以使用微 ...
- java中自定义比较器_Java中的比较器:自定义规则!!!
比较器 Java语言中的比较器分为两种: Comparable比较器:Comparable是排序接口:若一个类实现了Comparable接口,就意味着"该类支持排序".(作用在实体 ...
- java 自定义表达式_Java中使用Groovy实现自定义表达式解析
Groovy作为一种JVM-Based语言,目前普及程度正在提高.本文演示一下在Java类中,通过继承GDK的groovy.lang.Script类如何支持自定义表达式解析功能. 输入: 表示一行数据 ...
最新文章
- 我从阿里面试回来,想和Java程序猿谈一谈
- MyBatis——@Result注解column参数传递多个参数
- 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序
- 【LeetCode笔记 - 每日一题】318. 最大单词长度乘积(Java、位运算)
- Spark基础学习笔记23:DataFrame与Dataset
- nginx+redis 实现 jsp页面缓存,提升系统吞吐率
- 【18】Python半成品购物车
- inner join、 left join 、right join、full outer join之间的区别
- IntelliJ IDEA设置--类代码模板自定义(注释)
- python源代码程序编译后文件扩展名_Python源代码程序编译后的文件扩展名为_________。...
- 物品领用 系统 php,EXCEL物品管理系统V1.0(开放源码)
- SecureCRT 连接ubuntu操作系统(解决Ubuntu密钥交换失败的问题)
- 条件概率和正则概率(完)
- flink SQL与hbase整合
- 网络营销中词条推广的价值和注意事项
- 一个软件测试员如何选择mac妙控板或妙控鼠标
- java如何解压rar文件怎么打开,Java压缩与解压rar文件
- DZ拿shell总结
- 基于Linux系统sqlite3数据库的学生信息管理系统
- 大数据查询分析引擎比较