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

这篇具有很好参考价值的文章主要介绍了获取SQL语句表名,判断DDL类型(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.使用druid解析sql语句

引入依赖

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
2.处理sql语句

复杂的语句可能无法处理,但是大部分复杂的语句还是可以处理的

   //处理sql语句 去除ROW开头到结尾的字符串,去除换行符等,否则解析会报错
        String sqlDDl = "drop table if exists test_table05;" +
                "create table test_table15 (id int comment '自增ID',phone varchar(255) comment '手机号');" +
                "ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored AS textfile;";
        sqlDDl = sqlDDl.replaceAll("\r|\n"," ").replaceAll("(?i)ROW.*?(?=;)", " ");

“ . ”表示任意字符,“ * ”表示前面表达式匹配任意次,“ ? ”表示非贪婪模式,“ .*?” 是满足条件的情况只匹配一次,即懒惰匹配,“ ?<=A ” 表示以A开头、不替换A,“ ?=B ”表示以B结尾、不替换B,“(?i)”表示不区分大小写,“\r|\n” 表示换行符文章来源地址https://www.toymoban.com/news/detail-637682.html

3.获取sql语句的表名和ddl类型
 //解析数据库获取表名
        List<String> tableList = new ArrayList<>();
        try {
            SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sqlDDl, "mysql");
            List<SQLStatement> sqlStatements = parser.parseStatementList();
            if (CollectionUtils.isEmpty(sqlStatements)) {
                logger.info("stmtList为空无需获取");
                return;
            }
            for (SQLStatement sqlStatement : sqlStatements) {
                MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
                sqlStatement.accept(visitor);
                Map<TableStat.Name, TableStat> tables = visitor.getTables();
                logger.info("获取的数据表名和类型:{}",tables);
                tables.forEach((tableName,tableStat)->{
                    logger.info("tableStat:{}",tableStat);
                    if("Create".equals(tableStat.toString()))
                    tableList.add( tableName.getName());
                });
            }
        } catch (Except

到了这里,关于获取SQL语句表名,判断DDL类型(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL DDL语句

    Data Defination Language,数据定义语言。这类 SQL 语句用于定义或修改数据库结构。主要的 DDL 操作包括 CREATE(创建新表或数据库)、ALTER(修改现有数据库对象的结构)和 DROP(删除表、视图或其他数据库对象)。 创建数据表的时候,不但需要指定表名字和列名,还需要指定每列

    2024年02月05日
    浏览(36)
  • 数据备份文件生成--根据表名生成对应的sql语句文件

    最近客户有个需求,希望在后台增加手动备份功能,将数据导出下载保存。 当然,此方法不适用于海量数据的备份,这只适用于少量数据的sql备份。 这是我生成的sql文件,以及sql文件里的insert语句,已亲测,可以直接执行: 项目是SSM框架,接下来就展示我的实现代码: 首先

    2024年02月07日
    浏览(41)
  • jsqlparser解析sql获取表名,字段等

    在项目中需要多sql进行统一拦截处理,但是传入的sql千奇百怪,并有一些逻辑判断,如只对哪张表处理之类,因此需要对sql进行解析后,进行相关逻辑处理。 这里使用 jsqlparser 工具进行sql解析。 maven组件引入 使用方式 输出结果:

    2024年02月16日
    浏览(55)
  • ☆常用的Sql语句汇总(DDL/DML)

    里面有表注释 数据库种类 sql 备注 mysql -- 获取所有表名、视图名 show tables -- 获取 dev_test_data数据库 所有表、视图信息 select * from information_schema.tables where table_schema=\\\'dev_test_data\\\' -- 获取表名、视图名 select table_name from information_schema.tables where table_schema=\\\'dev_test_data\\\' -- 只获取表信息

    2024年02月03日
    浏览(55)
  • sql语句中的ddl和dml

    操作数据库:CRUD C(create) 创建 *数据库创建出来默认字符集为utf8 如果要更改字符集就 Create database 名称 character set gbk(字符集) *创建数据库:create database 名称 *先检查是否有该数据库在创建 create database if not exists 名称 创建db4数据库,判断是否存在,并指定字符集为gbk

    2024年02月11日
    浏览(34)
  • Oracle、达梦:☆获取数据库对象、获取对象的DDL定义语句(达梦)

    以下方式在达梦DM数据库中都能跑通,Oracle未测试所有的方式。 数据库所有对象表:包括 表、视图、物化视图、函数、存储过程……等 ①、ALL_OBJECTS视图方式 OBJECT_TYPE 解释: oracle 的ALL_OBJECTS中的OBJECT_TYPE表示: TABLE :表示表,这是用于存储和管理数据库中数据的主要结构。

    2024年02月03日
    浏览(83)
  • 【MySQL】不允许你不会SQL语句之DDL

    目录 前言: 一.DDL数据库语句 1.1语句讲解 1.2总结 二.DDL表语句 2.1语句讲解 2.2总结 三.DDL字段语句 3.1语句讲解 3.2总结 四.MySQL数据类型 五.结尾   在从零到一入门MySQL一篇中,我们对数据库已经有了一定的了解,接下来让我们学习SQL语句吧!   如果你对数据库的创建,查找,

    2024年02月08日
    浏览(58)
  • 【MySQL基础|第一篇】——谈谈SQL中的DDL语句

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 SQL语句主要分为以下4类,请看: 分类 说明 DDL (Data Definition Language) 数据定义

    2024年02月09日
    浏览(38)
  • mybatis-plus技巧--动态表名-多语句-拼接sql--关于mybatis的mysql分页查询总数的优化思考

    传入tableName参数就可以了,不过只能用$不能用# 因为#会发生预编译,然后会在表名上加引号’\\\'。 新建一个表名拦截类实现TableNameHandler mybatisPlus添加插件 实例: 每天按统计 如果表名为count则加上今天的时间 每次设置 直接设置名字,然后就会改变的。 需要在配置文件中的

    2024年01月16日
    浏览(49)
  • 【从删库到跑路】MySQL系列——详细讲解SQL的DDL,DML,DQL,DCL语句

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 内容有点多,建议大家先看目录。 建立在关系模型基础上,由多张相互连接的二维表组成的数据库 🏀使用表存储数据,格式统一,

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包