当前位置: 首页 > news >正文

达梦表字段、字段类型,精度比对及更改字段SQL生成

达梦表字段、字段类型,精度比对及更改字段SQL生成:

  1. 依赖
        <!-- 达梦 Connector --><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.62</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.0</version></dependency>
  1. 数据库配置文件参考
url = jdbc:dm://xxxx:xxxx?schema=xxx&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username = SYSDBA
password = SYSDBA
  1. Java代码
package com.lhq.datacontrast;import cn.hutool.db.Db;
import cn.hutool.db.DbUtil;
import cn.hutool.db.Entity;
import cn.hutool.db.ds.DSFactory;
import cn.hutool.setting.Setting;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.*;@SpringBootApplication
public class DataContrastApplication {public static void main(String[] args) throws SQLException {Setting prodSetting = new Setting("classpath: config/prod.setting");DataSource prodDs = DSFactory.create(prodSetting).getDataSource();Setting devSetting = new Setting("classpath: config/dev.setting");DataSource devDs = DSFactory.create(devSetting).getDataSource();List<Entity> devTable = Db.use(devDs).query("select Table_Name from SYS.ALL_TABLES where OWNER = 'HEALTH_RECORDS'");List<Entity> prodTable = Db.use(prodDs).query("select Table_Name from SYS.ALL_TABLES where OWNER = 'HZJJK_JBGW'");List<String> names = new ArrayList<>();for (Entity table : prodTable) {names.add(table.getStr("table_name"));}for (Entity entity : devTable) {if(entity.getStr("table_name").startsWith("GW_")){String tableName = entity.getStr("table_name").replace("GW_","");if(names.contains( tableName)) {contrastTable(prodDs, devDs, entity.getStr("table_name").replace("GW_", ""), entity.getStr("table_name"));}}}}private static void contrastTable(DataSource prodDs, DataSource devDs, String progTable, String devTable) throws SQLException {List<Entity> devResult = Db.use(devDs).query("\n" +"select * from all_tab_columns where Table_Name=? and OWNER = 'HEALTH_RECORDS';", devTable);List<Entity> progResult = Db.use(prodDs).query("\n" +"select * from all_tab_columns where Table_Name=? and OWNER = 'HZJJK_JBGW';", progTable);Map<String, Entity> progMap = new HashMap<>();for (Entity entity : progResult) {progMap.put(entity.getStr("column_name"), entity);}Map<String, Entity> devMap = new HashMap<>();for (Entity entity : devResult) {devMap.put(entity.getStr("column_name"), entity);}for (String s : progMap.keySet()) {if (devMap.containsKey(s)){if ( progMap.get(s).getStr("data_length").equals(devMap.get(s).getStr("data_length"))) {// 长度相同if(progMap.get(s).getStr("data_type").equals(devMap.get(s).getStr("data_type"))|| (Objects.equals(progMap.get(s).getStr("data_type"), "VARCHAR") && Objects.equals(devMap.get(s).getStr("data_type"), "VARCHAR2"))|| (Objects.equals(progMap.get(s).getStr("data_type"), "VARCHAR2") && Objects.equals(devMap.get(s).getStr("data_type"), "VARCHAR"))){continue;}else{Entity entity = progMap.get(s);System.out.println(String.format("字段名:%s,数据类型不一致,prod:%s->%s->%s,dev:%s->%s->%s",s, progTable,progMap.get(s).getStr("data_type"), progMap.get(s).getStr("data_length"),devTable,devMap.get(s).getStr("data_type"), devMap.get(s).getStr("data_length")));System.out.println(String.format("ALTER TABLE \"%s\".\"%s\" MODIFY \"%s\" %s(%s);", "HEALTH_RECORDS",devTable,s,entity.getStr("data_type"),entity.getStr("data_length")) );}} else {if(progMap.get(s).getStr("data_type").equals(devMap.get(s).getStr("data_type"))){// Entity entity = progMap.get(s);// System.out.println(String.format("字段名:%s,数据长度不一致,prod:%s->%s->%s,dev:%s->%s->%s",//         s, progTable,//         progMap.get(s).getStr("data_type"), progMap.get(s).getStr("data_length"),//         devTable,//         devMap.get(s).getStr("data_type"), devMap.get(s).getStr("data_length")));// System.out.println(String.format("ALTER TABLE \"%s\".\"%s\" MODIFY \"%s\" %s(%s);", "HEALTH_RECORDS",//         devTable,s,entity.getStr("data_type"),entity.getStr("data_length")) );// System.out.println("commit ");}else{Entity entity = progMap.get(s);System.out.println(String.format("字段名:%s,数据长度不一致,类型也不一致,prod:%s->%s->%s,dev:%s->%s->%s",s, progTable,progMap.get(s).getStr("data_type"), progMap.get(s).getStr("data_length"),devTable,devMap.get(s).getStr("data_type"), devMap.get(s).getStr("data_length")));System.out.println(String.format("ALTER TABLE \"%s\".\"%s\" MODIFY \"%s\" %s(%s);", "HEALTH_RECORDS",devTable,s,entity.getStr("data_type"),entity.getStr("data_length")) );}}}else{Entity entity = progMap.get(s);System.out.println(String.format("字段名:%s 在表\"%s\"中不存在", s, devTable));System.out.println(String.format("ALTER TABLE \"%s\".\"%s\" ADD %s %s(%s);","HEALTH_RECORDS",devTable,s,entity.getStr("data_type"),entity.getStr("data_length")) );System.out.println(String.format("COMMENT ON COLUMN \"%s\".\"%s\".\"%s\" IS '%s';","HEALTH_RECORDS",devTable,s, getComments(prodDs, progTable,s)) );System.out.println("commit;\n");}}}private static String getComments(DataSource ds, String table, String s) throws SQLException {List<Entity> query = Db.use(ds).query("select COMMENTS from all_col_comments where " +"OWNER='目标库' and TABLE_NAME =? and COLUMN_NAME = ?;", table, s);if(query.size() == 0 ){return null;}return query.get(0).getStr("COMMENTS");}}

相关文章:

达梦表字段、字段类型,精度比对及更改字段SQL生成

达梦表字段、字段类型&#xff0c;精度比对及更改字段SQL生成&#xff1a; 依赖 <!-- 达梦 Connector --><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.62</version>&l…...

2.pandas--读取文件夹中所有excel文件进行合并

文章目录 代码对应的本地文件文件夹目录三个文件夹中的内容test01.xlsxtest02.xlsxtest03.xlsx 三个文件合并后得到merge.xlsx文件文件内容 生成result.xlsx文件内容 代码 import glob import pandas as pddf_merge pd.DataFrame() # 创建一个空的DataFramefolder_path &qu…...

WPS Office两个严重漏洞曝光,已被武器化且在野利用

WPS Office作为一款用户基数超过2亿的广泛使用的办公套件&#xff0c;被发现存在两个关键漏洞&#xff08;CVE-2024-7262和CVE-2024-7263&#xff09;&#xff0c;这些漏洞可能导致用户遭受远程代码执行攻击。这两个漏洞的CVSS评分为9.3&#xff0c;表明它们的严重性很高&#…...

基于Java爬取微博数据(五) 补充微博正文列表图片 or 视频 内容

基于Java爬取微博数据五 补充微博正文列表图片 or 视频 内容 数据分析补充图片 or 视频执行结果 在通过对微博正文内容中的图片 or 视频内容进行分析后&#xff0c;图片 or 视频 链接是可以直接通过 Java 代码下载或者转存的&#xff0c;那么这样就可以补充我们在 【基于Java爬…...

反射异常捕获 | InvocationTargetException 要用e.getCause()打印才能看到具体异常

背景&#xff1a;线上某段和反射相关的代码报错了&#xff0c;但是异常信息打印只看到了 InvocationTargetException&#xff0c;没打印具体的异常。就像这样&#xff1a;java.lang.reflect.InvocationTargetException: null 查阅资料后发现要用e.getCause()才能打印具体异常&a…...

【计算机网络】网络版本计算器

此前我们关于TCP协议一直写的都是直接recv或者read&#xff0c;有了字节流的概念后&#xff0c;我们知道这样直接读可能会出错&#xff0c;所以我们如何进行分割完整报文&#xff1f;这就需要报头来解决了&#xff01; 但当前我们先不谈这个话题&#xff0c;先从头开始。 将会…...

使用 Python 爬虫进行网站流量分析:Referer 头的利用

在互联网时代&#xff0c;网站流量分析是了解用户行为、优化网站结构和提升用户体验的重要手段。本文将介绍如何使用 Python 爬虫技术结合 HTTP Referer 头进行网站流量分析&#xff0c;以及如何实现这一过程。 什么是 HTTP Referer 头&#xff1f; HTTP Referer 头是一个请求…...

梧桐数据库(WuTongDB):数据库技术中LL算法详解

LL 算法是一种自顶向下的语法分析算法&#xff0c;广泛用于构建解析器。LL 分析器逐个读取输入符号&#xff0c;从左到右分析&#xff08;Left-to-Right&#xff09;&#xff0c;并使用最左推导&#xff08;Leftmost Derivation&#xff09;来生成语法树。因此&#xff0c;LL 分…...

【秋招笔试】8.18大疆秋招(第一套)-后端岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…...

CSS 的text-size-adjust属性

text-size-adjust 属性在CSS中用于控制用户是否可以调整网页中文字的字体大小。这个属性主要针对移动设备上的浏览器&#xff0c;尤其是那些允许用户通过捏合&#xff08;pinch&#xff09;手势来缩放整个页面的浏览器。 语法 text-size-adjust: none; text-size-adjust: aut…...

阿里MAXCOMPUTE数据专辑信息读取并同步数据表

阿里MAXCOMPUTE数据专辑信息读取并同步数据表 在阿里云大数据体系中&#xff0c;我们可以使用数据地图的数据专辑&#xff0c;对数据的类别等进行一个管理 那么管理后的数据&#xff0c;我们想要落表进行相关的数据分析&#xff0c;如何做呢&#xff1f; 查看阿里云官方文档…...

rufus制作ubantu的U盘安装介质时,rufus界面上的分区类型选什么?

rufus制作ubantu的U盘安装介质时&#xff0c;rufus软件界面上的分区类型选什么(如下图&#xff09;&#xff1f; 在使用Rufus制作Ubuntu的U盘安装介质时&#xff0c;分区类型的选择取决于我们的计算机的引导方式。 以下是具体的选择建议&#xff1a; 1、查看计算机的引导方式…...

【系统架构设计师-2018年】案例分析-答案及详解

试题一&#xff08;25分&#xff09; 阅读以下关于软件系统设计的叙述&#xff0c;在答题纸上回答问题1至问题3。 【说明】 某文化产业集团委托软件公司开发一套文化用品商城系统&#xff0c;业务涉及文化用品销售、定制、竞拍和点评等板块&#xff0c;以提升商城的信息化建设…...

linux驱动入门实验班——平台总线设备驱动模型和设备树

目录 前言 一、重要结构体 二、编程思路 1.platform_driver结构体 2.probe 三、使用设备树 1.步进电机 2.红外遥控 四、代码示例 前言 在这里主要记录学习韦东山老师Linux驱动人入门实验班的笔记&#xff0c;韦东山老师的驱动课程讲的非常好&#xff0c;想要学习驱动…...

零基础学习Python(六)

1. 元类的应用 使用元类给对象添加一个固有属性author: 对类名进行限定&#xff0c;要求类名必须是大写字母开头&#xff1a; class MetaC(type):def __init__(cls, name, bases, attrs):if not name.istitle():raise TypeError("类名必须是大写字母开头~")return …...

微信小程序--31(todolist案例)

一.功能 输入待办事件添加代办事件删除代办事件 二、步骤 1.添加输入框 .wxml代码&#xff1a; <!-- 1.输入框 --><input type"text" bindinput"handleInput" value"{{text}}" /> .wxss代码&#xff1a; /* 1.输入框样式 */ i…...

springboot项目使用本地依赖项,打包后出现NoClassDefFoundError的一种解决方法

可以把本地依赖项上传到本地仓库后再引用 建立 Maven 本地仓库并将依赖上传到本地仓库 要建立 Maven 本地仓库并将依赖上传到本地仓库&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 配置 Maven 本地仓库路径 Maven 默认会在用户的主目录下的 .m2/repository 目录创…...

Maven高级使用指南

在开发大型项目时&#xff0c;Maven作为一个强大的构建和项目管理工具&#xff0c;能显著提升项目管理和构建的效率。然而&#xff0c;随着项目的扩大&#xff0c;维护和管理的复杂性也随之增加。本文将探讨一些高级的Maven用法和解决方案&#xff0c;以帮助你更好地管理大型项…...

windows docker 执行apt-get 权限问题

今天在windows下安装的docker 部署的容器执行apt-get遇到权限问题 PS C:\Users\xiaok> docker exec -it jenkins sh $ apt-get update Reading package lists... Done E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to l…...

Linux系统信息排查

目录 介绍步骤 介绍 1、熟悉查看CPU信息、操作系统信息、用户信息、特殊权限账户、启动项和任务计划的排查命令 2、在进行受害主机排查时&#xff0c;首先要对主机系统进行基本排查&#xff0c;方便对受害主机有一个初步的了解。 3、利用lscpu和uname -a查看系统硬件软件基本…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...