思路

用开源的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里的表名及关键字段相关推荐

  1. SQL语句获取数据库名、所有表名、所有字段名及字段类型

    SQL语句获取所有用户名,数据库名.所有表名.所有字段名及字段类型,方法来自于网上,稍加修改 1.获取所有用户名: SELECT name FROM Sysusers where status='2' ...

  2. SQL获取所有用户名,数据库名、所有表名、所有字段名及字段类型

    SQL获取所有用户名,数据库名.所有表名.所有字段名及字段类型2009-03-14 10:481.获取所有用户名:SELECT name FROM Sysusers where status='2' ...

  3. oracle获取 表名,Oracle获取当前数据库的所有表名字段名和注释

    获取所有的表名和标注释 SELECT a.TABLE_NAME,b.COMMENTS FROM all_tables a left join user_tab_comments b on a.TABL ...

  4. 自定义关键字_Java中的自定义异常

    在测试脚本的编写中会需要使用自定义异常,通常可以很容易地用「Java」创建自定义异常类.它可以是已检查或未检查的异常.下面将演示一个简单的示例来检查Java中自定义异常的创建. 如何创建自定义异常类 ...

  5. VUEJS项目实践四之自定义键盘指令(按键即获取焦点)

    上回书说到怎么在vue.js中添加bootstrap样式,这次来写一下键盘按键指令吧- 一.先来说一下vue.js本来就有的按键指令吧- 这个就灰常的简单和方便啦- 1.随便找一个vue页面文件,在& ...

  6. java 自定义 转换器_Java笔记之SpringMVC(七):自定义String到Date的类型转换器

    0.说在前面 1.新建converter.jsp 转换器页面 日期: 提交 ${converteredDate } 2.新建ConverterController类 packagecom.spring ...

  7. java 创建自定义菜单_Java实现微信公众号自定义菜单的创建方法示例

    本文实例讲述了Java实现微信公众号自定义菜单的创建方法.分享给大家供大家参考,具体如下: 开发公众号的时候可能需要给一些自定义菜单添加事件,比如点击某菜单然后服务端给用户推送信息. 我们也可以使用微 ...

  8. java中自定义比较器_Java中的比较器:自定义规则!!!

    比较器 Java语言中的比较器分为两种: Comparable比较器:Comparable是排序接口:若一个类实现了Comparable接口,就意味着"该类支持排序".(作用在实体 ...

  9. java 自定义表达式_Java中使用Groovy实现自定义表达式解析

    Groovy作为一种JVM-Based语言,目前普及程度正在提高.本文演示一下在Java类中,通过继承GDK的groovy.lang.Script类如何支持自定义表达式解析功能. 输入: 表示一行数据 ...

最新文章

  1. 我从阿里面试回来,想和Java程序猿谈一谈
  2. MyBatis——@Result注解column参数传递多个参数
  3. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序
  4. 【LeetCode笔记 - 每日一题】318. 最大单词长度乘积(Java、位运算)
  5. Spark基础学习笔记23:DataFrame与Dataset
  6. nginx+redis 实现 jsp页面缓存,提升系统吞吐率
  7. 【18】Python半成品购物车
  8. inner join、 left join 、right join、full outer join之间的区别
  9. IntelliJ IDEA设置--类代码模板自定义(注释)
  10. python源代码程序编译后文件扩展名_Python源代码程序编译后的文件扩展名为_________。...
  11. 物品领用 系统 php,EXCEL物品管理系统V1.0(开放源码)
  12. SecureCRT 连接ubuntu操作系统(解决Ubuntu密钥交换失败的问题)
  13. 条件概率和正则概率(完)
  14. flink SQL与hbase整合
  15. 网络营销中词条推广的价值和注意事项
  16. 一个软件测试员如何选择mac妙控板或妙控鼠标
  17. java如何解压rar文件怎么打开,Java压缩与解压rar文件
  18. DZ拿shell总结
  19. 基于Linux系统sqlite3数据库的学生信息管理系统
  20. 大数据查询分析引擎比较

热门文章

  1. wifi无线上网技巧
  2. windows 系统监视器 以及建议阀值
  3. 湖北省武汉市电信IDC机房
  4. html grid布局,css grid布局使用
  5. Tabhost嵌套以及Tab中多个Activity跳转的实现
  6. 系统程序员成长计划-组合的威力
  7. linux无锁化编程
  8. 位操作(Bit manipulation)
  9. apache服务器的配置文件httpd.conf中有很多内容,请解释如下配置项:
  10. case 关键字后面的的值有什么要求吗?