首页 > 数据库 >Druid解析SQL获取注释、表明

Druid解析SQL获取注释、表明

时间:2023-06-13 14:37:45浏览次数:57  
标签:case COMMENT SQLUtils DEFAULT NULL Druid SQL 解析


一、简介

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
文档地址

https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

参考地址:

https://github.com/alibaba/druid/issues/2457
https://github.com/alibaba/druid/issues/2426

二、相应API

1、格式化SQL

String sql = "CREATE TABLE `my_user` (\n" +
        "  `id` int(11) DEFAULT NULL COMMENT 'ID',\n" +
        "  `name` varchar(255) DEFAULT NULL COMMENT '名称',\n" +
        "  `sex` int(11) DEFAULT NULL COMMENT '性别(1:男。2:女)',\n" +
        "  `address` varchar(64) DEFAULT NULL COMMENT '地址',\n" +
        "  `create_time` datetime DEFAULT NULL COMMENT '创建时间',\n" +
        "  `update_time` datetime DEFAULT NULL COMMENT '更新时间'\n" +
        ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'";
//  格式化SQL(假如SQL为多个SQL拼接,则list数量会大于0)
List<SQLStatement> sqlStatements = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL);
SQLStatement sqlStatement = sqlStatements.get(0);

2、解析SQL,获取表名

SQLCreateTableStatement sqlCreateTableStatement = (SQLCreateTableStatement) SQLUtils.parseStatements(sql, JdbcConstants.MYSQL).get(0);
String tableName = sqlCreateTableStatement.getTableName();
SQLName name = sqlCreateTableStatement.getName();

3、解析SQL,获取列名称

SQLCreateTableStatement sqlCreateTableStatement = (SQLCreateTableStatement) SQLUtils.parseStatements(sql, JdbcConstants.MYSQL).get(0);

List<SQLColumnDefinition> columnDefinitions = sqlCreateTableStatement.getColumnDefinitions();
for (SQLColumnDefinition column : columnDefinitions) {
    String name = column.getName().toString();
    String comment = column.getComment().toString();
}

4、替换表名

List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL);

HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("old_table", "new_table");
String changeSQL = SQLUtils.toSQLString(stmtList, JdbcConstants.MYSQL, null, new SQLUtils.FormatOption(true, false), hashMap);

三、支持数据源类型

case oracle:
case oceanbase_oracle:
case mysql:
case mariadb:
case drds: 
case elastic_search: 
case postgresql:
case edb:
case sqlserver:
case jtds:
case h2:
case blink:
case db2:
case odps:
case phoenix:
case hive:
case presto:
case trino:
case ads:
case antspark:
case clickhouse:


标签:case,COMMENT,SQLUtils,DEFAULT,NULL,Druid,SQL,解析
From: https://blog.51cto.com/u_14883832/6469706

相关文章

  • mysql笔记
    1.mysql初始密码修改:进入mysql后,输入:ALTERUSERroot@localhostIDENTIFIEDBY'新密码';2.mysql打开命令:1.mysql-uroot-p,密码;2.mysql-uroot-p密码;3.显示所有数据库:showdatabases;;4.删除数据库:dropdatabase数据库名;;......
  • MySQL 8 配置文件
    #[client]#user=root#password=1111aaA_[mysql]prompt="\u@mysqldb\R:\m:\s[\d]>"no-auto-rehash[mysqld_safe]malloc-lib=tcmalloc[mysqldump]single-transaction[mysqld]#basicsettings#server-id=11port=3306user=mys......
  • mysql数据库备份及恢复命令mysqldump,source的用法
    还原一个数据库:mysql-hlocalhost-uroot-p123456www<c:/www.sql备份一个数据库:mysqldump-hlocalhost-uroot-p123456www>d:/www2008-2-26.sql  //以下是在程序中进行测试//$command="mysqldump--opt-h$dbhost-u$dbuser-p$dbpass$dbname|gzip>$backup......
  • 如何将 pl/sql Developer 中查询的结果集导出到 Excel . txt . html . xml csv中?
    如何将pl/sqlDeveloper中查询的结果集导出到Excel.txt.html.xmlcsv中?https://blog.csdn.net/fish_boneold/article/details/83919116选中结果集,点击右键选 copytoexcel就可导出到一个临时的excel文件了,如temp001.xls,然后选择文件-另存为保存为我们的文......
  • 常用sql语句备忘录,不定时更新
    1updatetab_userssetPhoneNum=REPLACE(PhoneNum,CHAR(13),'')--去除回车符2updatetab_userssetPhoneNum=REPLACE(PhoneNum,CHAR(10),'')--去除换行符3updatetab_userssetPhoneNum=REPLACE(PhoneNum,CHAR(9),'')--去除tab制表符4updatetab_use......
  • nodejs 和 mysql 连接
      原文https://www.mysqltutorial.org/mysql-nodejs/connect/   letmysql=require('mysql')letconnection=mysql.createConnection({host:'119.91.31.144',user:'test1',password:'',//密码database:......
  • MySQL读取的记录和我想象的不一致
    摘要:并发的事务在运行过程中会出现一些可能引发一致性问题的现象,本篇将详细分析一下。本文分享自华为云社区《MySQL读取的记录和我想象的不一致——事物隔离级别和MVCC》,作者:砖业洋__。事务的特性简介1.1原子性(Atomicity)要么全做,要么全不做,一系列操作都是不可分割的,如果在执......
  • ble开发-连接状态下的蓝牙遥控数据包解析
    通过Wireshark抓包获取蓝牙遥控器的HID数据包如下,现对其进行分析 (1) 02 代表了HCI的数据格式HCIACLDatapacket:Controller上报给Host的事件,只能由Controller发出(2)012e host层想用更少的位来表示访AccessAddress,Controller用12位即3字节的连接句柄Handle用来表......
  • SQL 2012 更换数据库路径
    SQL2012更换数据库路径 SQL2012更换数据库路径Sqlserver数据库存储路径的修改Sqlserver数据库存储路径问题:本系统sqlserver路径默认是存储在C盘目录下的,由于数据会慢慢变大和避免重装系统数据丢失等问题,最好手动将路径设置在D盘。更改路径方法:情况一:更改数据库默认存储路......
  • sql语句
    SELECTsum(CASEWHENtimeBETWEEN'2021-07-1500:00:00'AND'2021-07-1500:30:00'THEN1ELSE0END)AS'1',sum(CASEWHENtimeBETWEEN'2021-07-1500:30:00'AND'2021-07-1501:00:00'THEN1ELSE0END......