快捷搜索:  汽车  科技

java获取执行sql的文件(如何获取自定义sql里的表名及关键字段)

java获取执行sql的文件(如何获取自定义sql里的表名及关键字段)1、新建一个 maven 工程名为 TestsqlParserdruid 现在已经直接发布到了 maven 仓库中,可以直接引用。理论上说,支持所有有jdbc驱动的数据库。实际测试过的有mysql(大规模使用)、oracle(大规模使用)、sqlserver、postgres、db2、h2、derby、sqlite、sybase。druid 使用说明:

思路

用开源的druid解析 sql 语句。

druid 是阿里开源在github 上面的数据库连接池,里面有一个专门解析 sql 语句的模块。

java获取执行sql的文件(如何获取自定义sql里的表名及关键字段)(1)

支持的数据库类型:

理论上说,支持所有有jdbc驱动的数据库。

实际测试过的有mysql(大规模使用)、oracle(大规模使用)、sqlserver、postgres、db2、h2、derby、sqlite、sybase。

java获取执行sql的文件(如何获取自定义sql里的表名及关键字段)(2)

druid 使用说明:

druid 现在已经直接发布到了 maven 仓库中,可以直接引用。

1、新建一个 maven 工程名为 TestsqlParser

2、在 pom.xml 文件中加入如下配置,当前最新使用 1.2.3

<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency>

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<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); 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()); } } }

java获取执行sql的文件(如何获取自定义sql里的表名及关键字段)(3)

我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。

猜您喜欢: