解析sql 查询sql中存在的表名

package com.example.demo.test;


import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.util.TablesNamesFinder;

import java.util.*;



public class SqlAnalysis {
    public void rr() throws JSQLParserException {
        String sql = "SELECT * FROM bbb.TABLE1";
        String sq = "\r\n" +
                "SELECT DISTINCT\r\n" +
                "  opb_subject.subj_name,\r\n" +
                "  frominstances.Widget_Id,\r\n" +
                "  opb_mapping.mapping_name,\r\n" +
                "SUBSTR(opb_src.source_name, 1, INSTR(opb_src.source_name, '_')-1) as pwx,\r\n" +
                "  SUBSTR(opb_src.source_name, INSTR(opb_src.source_name, '_')+1) as src,\r\n" +
                "\r\n" +
                "  opb_src.source_name src_table_nm,\r\n" +
                "  opb_targ.target_name tgt_table_nm\r\n" +
                "  FROM\r\n" +
                "  dd.opb_subject,\r\n" +
                "  dd.opb_mapping,\r\n" +
                "  dd.opb_src,\r\n" +
                "  dd.opb_src_fld,\r\n" +
                "  dd.opb_targ,\r\n" +
                "  dd.opb_targ_fld,\r\n" +
                "  dd.opb_Swidget_inst frominstances,\r\n" +
                "  dd.opb_Swidget_inst toinstances\r\n" +
                "  WHERE\r\n" +
                "  opb_subject.subj_id = opb_mapping.subject_id\r\n" +
                "  AND opb_mapping.mapping_id = frominstances.mapping_id\r\n" +
                "  AND opb_mapping.mapping_id = toinstances.mapping_id\r\n" +
                "  AND opb_targ.target_id = toinstances.widget_id\r\n" +
                "  AND toinstances.widget_type = 2\r\n" +
                "  AND opb_targ_fld.target_id = opb_targ.target_id\r\n" +
                "  AND opb_src.src_id = frominstances.widget_id\r\n" +
                "  AND frominstances.widget_type = 1\r\n" +
                "  AND opb_src_fld.src_id = opb_src.src_id";
        Statement statement = (Statement) CCJSqlParserUtil.parse(sq);
        TablesNamesFinder tablesNamesFinder =new TablesNamesFinder();

        List<String> result = tablesNamesFinder.getTableList(statement);
            System.out.println("size:"+result.size());
            for(String table:result) {
                System.out.println(table);
        }
    }
}

在网上查找了一个工具类,测试下,还是很靠谱的。

顺带debug了下,发现statement真的存了好多东西。

可惜解析sql这个类我也是刚接触,还不知道怎么去其他的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值