<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9</version>
</dependency>
import java.io.StringReader;
import java.util.List; import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.replace.Replace;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.TablesNamesFinder; public class DataPermissionSqlUtil { private static CCJSqlParserManager pm = new CCJSqlParserManager(); /**
* detect table names from given table
* ATTENTION : WE WILL SKIP SCALAR SUBQUERY IN PROJECTION CLAUSE
* */
private static List<String> getTableNames(String sql) throws Exception {
List<String> tablenames = null;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
Statement statement = pm.parse(new StringReader(sql));
if (statement instanceof Select) {
tablenames = tablesNamesFinder.getTableList((Select) statement);
} else if (statement instanceof Update) {
return null;
} else if (statement instanceof Delete) {
return null;
} else if (statement instanceof Replace) {
return null;
} else if (statement instanceof Insert) {
return null;
}
return tablenames;
}
public static void main(String[] args) {
String sql = " select d.* from (SELECT qt.qt_org_id as orgId,qt.qt_owner_id as ownerId,own.OWN_NAME as ownerName, mat.mat_barcode as matBarcode, mat.MAT_CODE as matCode, mat.MAT_NAME as matName, "
+ " m.avgDailyOutboundQty as avgDailyOutboundQty, sum(qt.QT_ONHAND_QTY) availableQty"
+ " from riv_quant qt "
+ " right join (select ONH_OWNER_ID as ownId, chl.CHL_MATERIAL_ID as matId"
+ " from riv_check_l chl "
+ " INNER JOIN riv_outbound_notice_h onh on onh.ONH_ID = chl.CHL_ONH_ID "
+ " where onh.onh_status = 90 "
+ " GROUP BY chl.CHL_MATERIAL_ID) m on m.matId = qt.QT_MATERIAL_ID "
+ " INNER JOIN riv_owner own on own.OWN_ID = qt.QT_OWNER_ID "
+ " inner join riv_material mat on mat.mat_id = qt.QT_MATERIAL_ID "
+ " GROUP BY m.ownId, m.matId) d ";
try {
List<String> tablenames = getTableNames(sql);
System.out.println(tablenames);
} catch (Exception e) {
e.printStackTrace();
}
} }
[riv_quant, riv_check_l, riv_outbound_notice_h, riv_owner, riv_material]

从sql中获取表名的更多相关文章

  1. Sql中获取表结构(字段名称,类型,长度,说明)

    Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...

  2. 解析sql中的表名

    最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析 初步思路: 1.转义字符:去除两个引号连在一起的 2.字符串: 去除所有被引号包裹的 3.括号:识别括号处理 ...

  3. sql 2012中获取表的信息,包含字段的描述

    1.获取数据库中的表 select name from sysobjects where type='U' 2.获取表字段(此处是Route表) Select name from syscolumns ...

  4. 在SQL SERVER中获取表中的第二条数据

    在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...

  5. sql查询数据库中所有表名

    查询数据库里所有表名和字段名的语句SQL 查询所有表名:SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'SELECT * FROM INFORMATION_SCHE ...

  6. 记一次JPA遇到的奇葩错误——本地sql不识别表名的别名

    记一次JPA遇到的奇葩错误——本地sql不识别表名的别名 报错:Unknown column 'our' in 'field list' 起因:需要本地sql查询后,分页返回自定义对象.报错信息如下: ...

  7. SQLSERVER和ORACLE系统表获取表名 列名以及列的注释

    在工作中从数据库取的数据要导出来,但是发现导出的EXCEL中列名都是字段名(英文),为此搜集资料怎么把字段名变为中文名称,而发现ORACLE和SQLSERVER(用的SQLSERVER2008R2)又 ...

  8. 分析sql语句所有表名及其别名的正则表达式

    最近为了 写一个分布式的数据组件构想了很多的方案,最近一个简单易行的方案终于在脑袋里成型.昨晚想到凌晨1点多,发现方案虽简单,但所有的数据库工具就不能使用了 .除非自己写一下查询分析器来执行程序员自己 ...

  9. PostgreSQL数据库中获取表主键名称

    PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...

随机推荐

  1. bzoj 3144 切糕 —— 最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144 每个点拆成 R 个,连成一条链,边上是权值,割掉代表选这一层: 然后每个点的第 t 层 ...

  2. Poj 1504 Adding Reversed Numbers(用字符串反转数字)

    一.题目大意 反转两个数字并相加,所得结果崽反转.反转规则:如果数字后面有0则反转后前面不留0. 二.题解 反转操作利用new StringBuffer(s).reverse().toString() ...

  3. MATLAB模糊逻辑工具箱函数

    说明:本文档中所列出的函数适用于Matlab5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档. 1. GUI工具 Anfisedit      打开ANF ...

  4. Selenium VS Webdriver

    Selenium 是 ThroughtWorks 一个强大的基于浏览器的开源自动化测试工具,它通常用来编写 Web 应用的自动化测试.随着 Selenium 团队发布 Selenium 2(又名 We ...

  5. 加减 script函数初识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. (转)JAVA中的权限修饰符

    注:本博文是转载的,原文地址:http://blog.csdn.net/xk632172748/article/details/51755438 Java中修饰符总结: 访问控制修饰符 访问控制修饰符 ...

  7. 使用JFileChooser打开文件

    -----------------siwuxie095                                 工程名:TestFileChooser 包名:com.siwuxie095.fi ...

  8. Python脚本打包为exe文件

    本文转载自http://www.open-open.com/lib/view/open1342675735745.html   把用Python写好的脚本,可以用pyinstaller打包成.exe文 ...

  9. qboimathtest1 t1 魔法串

    题目 小 N 最近在沉迷数学问题. 对于一个数字串 S,如果可以将它划分成两个数字 A.B,满足: 1. S=AB. 2. A.B 均不包含前导 0. 3. B 是 A 的倍数,且B / A是完全立方 ...

  10. 【Qt官方例程学习笔记】Raster Window Example(画笔的平移/旋转/缩放应用)

    这个例子显示了如何使用QPainter渲染一个简单的QWindow. 值得学习的内容 <QtGui>头文件 #include <QtGui>就可以使用Qt GUI模块中的所有类 ...