获取SQL语句表名,判断DDL类型

news2024/9/30 5:36:36

1.在maven中引入jsqlparser依赖

	<!--sql语句解析-->
		<dependency>
			<groupId>com.github.jsqlparser</groupId>
			<artifactId>jsqlparser</artifactId>
			<version>4.4</version>
		</dependency>

2.解析SQL语句具体代码

此代码解析了sql语句,并且判断ddl类型是否是create,如果是create就查出表名

 public List<String> getTableInfo(String sqlDDl) {
        //解析数据库获取表名
        List<String> tableList = new ArrayList<>();
        try {
            Statements statements = CCJSqlParserUtil.parseStatements(sqlDDl);
            TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
            logger.info("statement->{}", statements);
            if (CollectionUtils.isNotEmpty(statements.getStatements())) {
                statements.getStatements().forEach(statement -> {
                 //判断ddl类型是否是create类型 ,如果想获取ddl所有语句的表名,这条代码去掉
                    if (statement instanceof CreateTable) {
                        List<String> tableList1 = tablesNamesFinder.getTableList(statement);
                        if (CollectionUtils.isNotEmpty(tableList1)) {
                            tableList.add(tableList1.get(0));
                            logger.info("table->{}", tableList1);
                        }
                    }
                });
            }
        } catch (JSQLParserException e) {
            e.printStackTrace();
            }
            }
            

3.解析SQL语句, 获取表名

4.如果是hive语句,带有特殊字符解析会报错,用正则表达式去除

 @Test
    public void senDdlMq() {
        String sqlDDl = "drop table if exists test_table05;" +
                "\ncreate table test_table05 (\nid int comment '自增ID',\nphone varchar(255) comment '手机号'" +
                ") " +
                "row FORMAT DELIMITED FIELDS TERMINATED by ',' stored AS textfile;";
        sqlDDl = sqlDDl.replaceAll("\r|\n"," ");
        sqlDDl = sqlDDl.replaceAll("(?i)ROW.*?(?=;)", " ");
        logger.info("sqlDDl:"+sqlDDl);
        List<String> tableInfo = getTableInfo(sqlDDl);

    }

在这里插入图片描述
“ . ”表示任意字符,“ ? ”表示匹配一次或多次,“ ?<=A ” 表示以A开头、不替换A,“ ?=B ”表示以B结尾、不替换B,“(?i)”表示不区分大小写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/837216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何消除“信息孤岛”对业务增长的威胁?

根据CMSWire的数据&#xff0c;员工平均每天要花36%的时间来查找和整合信息。但44%的情况下&#xff0c;他们找不到信息。这种时间和精力的浪费就是信息孤岛造成的。 什么是信息孤岛&#xff1f; 当部门存储数据并限制其他人访问数据时&#xff0c;就会出现信息孤岛&#xff…

动态代理类之万能模板

ProxyInvocationHandler package com.heerlin.demo03;import com.heerlin.demo02.Rent;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;//用这个类&#xff0c;自动生成代理类 public class ProxyInvocationH…

LeetCode每日一题Day5——21. 合并两个有序链表

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

力扣 1049. 最后一块石头的重量 II

题目来源&#xff1a;https://leetcode.cn/problems/last-stone-weight-ii/description/ C题解&#xff08;思路来源代码随想录&#xff09;&#xff1a;本题其实就是尽量让石头分成重量相同的两堆&#xff0c;相撞之后剩下的石头最小&#xff0c;这样就化解成01背包问题了。 …

第一章-JavaScript基础进阶part2:事件

文章目录 概念一、注册事件&#xff08;绑定事件&#xff09;1.1 addEventListener事件监听 二、删除事件&#xff08;解绑&#xff09;三、DOM事件流四、事件对象event4.1 e.target与this与e.currentTarget的区别4.2 事件对象的常见属性 五、阻止事件默认行为及冒泡六、事件委…

【CSS】旋转中的视差效果

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

【SpringBoot】日志是+基于lombok的日志输出

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 在我们日常的程序开发中&#xff0c;日志是程序的重要组成部分&#xff0c;想象⼀下&#xff0c;如果程序报错了&#xff0c;不让你打开控制台看⽇志&#xff0c;那么你能找到报错的原因吗…

网络安全设备-等保一体机

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元&#xff08;安全网元包括&#xff1a;防火…

problem(3):python IDE和python解释器

为什么写这篇文章呢&#xff1f;遇到了下面的问题&#xff0c;相同的解释器&#xff0c;如果运行angr库的代码&#xff0c;会出现 这样的情况&#xff0c;但是用spyder IDE 会显示正常&#xff0c;很奇怪 应该就是IDE的原因 IDE的循环导入问题 检查IDE配置&#xff1a; 如果可…

DoIP学习笔记系列:(四)用CAPL脚本读取DID的关键点

文章目录 1. 如何在CAPL中读取DID?1.1 避坑如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 1. 如何在CAPL中读取DID? 通常在实际项目中,会有很多DID,各种版本号、各种观测量,如果手动点,显然很麻烦,如果要…

pyspark使用XGboost训练模型实例

遇到一个还不错的使用Xgboost训练模型的githubhttps://github.com/MachineLP/Spark-/tree/master/pyspark-xgboost 1、这是一个跑通的代码实例&#xff0c;使用的是泰坦尼克生还数据&#xff0c;分类模型。 这里使用了Pipeline来封装特征处理和模型训练步骤&#xff0c;保存为…

多语言gRPC开发入门与避坑指南

目录 gRPC相关介绍 什么是gPRC gPRC的优点 gPRC的缺点 gPRC定位 协议缓冲区&#xff08;Protocol Buffers&#xff09; 四种调用方式 gRPC开发三大步骤 第一步&#xff1a;定义和编写proto服务文件 第二步&#xff1a;proto文件转化为gRPC代码 第三步&#xff1a;调…

vue3—SCSS的安装、配置与使用

SCSS 安装 使用npm安装scss&#xff1a; npm install sass sass-loader --save-dev 配置 配置到全局 &#x1f31f;附赠代码&#x1f31f; css: {preprocessorOptions: {scss: {additionalData:import "./src/Function/Easy_I_Function/Echarts/ToSeeEcharts/utill.…

caj文件怎么转换成pdf?了解一下这种方法

caj文件怎么转换成pdf&#xff1f;如果你曾经遇到过需要将CAJ文件转换成PDF格式的情况&#xff0c;那么你一定知道这是一件麻烦的事情。幸运的是&#xff0c;现在有许多软件和工具可以帮助你完成这项任务。下面就给大家介绍一款使用工具。 【迅捷PDF转换器】是一款功能强大的工…

camunda-modeler(5.9.0)介绍及下载

官网地址: https://camunda.com/ 中文站点:http://camunda-cn.shaochenfeng.com Camunda Modeler是一个用于创建、编辑和验证BPMN、CMMN和DMN模型的工具。它提供了一个可视化的界面&#xff0c;使用户可以以图形方式设计和调整工作流程、决策表和案例管理模型。 具体来说&…

8266 ESP-07模块的使用 以及详细介绍

esp8266系列 陶瓷天线 版本 详细介绍说明 最近使用8266的ESP-01S做了个数据无线收发装置&#xff0c;发现板载天线信号太弱&#xff0c;装上外壳后信号更弱&#xff0c;因此考虑能否使用带有外接天线的模块代替ESP-01S。经过在安可信官网搜索发现&#xff0c;ESP07、ESP07S、ES…

2023上半年手机及数码行业分析报告(京东销售数据分析)

2023年上半年&#xff0c;手机市场迎来复苏&#xff0c;同环比来看&#xff0c;销量销额纷纷上涨。 而数码市场中&#xff0c;各个热门品类表现不一。微单相机及智能手表同比去年呈现增长态势&#xff0c;而笔记本电脑市场则出现下滑。 基于此现状&#xff0c;鲸参谋发布了20…

Python实现(条形码,二维码)生成识别

Python实现&#xff08;二维码&#xff0c;条形码&#xff09;生成识别 生成条形码生成二维码识别条形码二维码 生成条形码 安装barcode模块: $ pip install python-barcode barcode文档 import barcode from barcode.writer import ImageWriter # 更多了解&#xff1a;https…

TX验证码

好久没分享文章了&#xff0c;今天来水水文章。 水的意思就是&#xff1a;文章不会分析参数的生成流程。 最开始菜鸡弟弟以为腾讯防水墙就只有一个滑块来着&#xff0c;也感谢不不哥哥提供的网址。 来看下tx旗下的验证类型。 当然除了这些之外&#xff0c;还有一种六宫格的&a…

心率变异性HRV指标说明:SDNN,SDANN,RMSSD,SDNNIndex,SDSD,NN50,PNN50;TP,ULF,VLF,LF,HF

自主神经活动与多种疾病有关系&#xff0c;特别是与某些心血管疾病的死亡率&#xff0c;尤其与猝死率有关。同时&#xff0c;也公认心率变异性&#xff08;HRV&#xff09;分析是判断自主神经活动的常用的定量指标。HRV降低是预测心脏病人死亡的独立危险因子&#xff0c;有十分…