达梦表字段、字段类型,精度比对及更改字段SQL生成
达梦表字段、字段类型,精度比对及更改字段SQL生成:
- 依赖
<!-- 达梦 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>
- 数据库配置文件参考
url = jdbc:dm://xxxx:xxxx?schema=xxx&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username = SYSDBA
password = SYSDBA
- 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生成
达梦表字段、字段类型,精度比对及更改字段SQL生成: 依赖 <!-- 达梦 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亿的广泛使用的办公套件,被发现存在两个关键漏洞(CVE-2024-7262和CVE-2024-7263),这些漏洞可能导致用户遭受远程代码执行攻击。这两个漏洞的CVSS评分为9.3,表明它们的严重性很高&#…...
基于Java爬取微博数据(五) 补充微博正文列表图片 or 视频 内容
基于Java爬取微博数据五 补充微博正文列表图片 or 视频 内容 数据分析补充图片 or 视频执行结果 在通过对微博正文内容中的图片 or 视频内容进行分析后,图片 or 视频 链接是可以直接通过 Java 代码下载或者转存的,那么这样就可以补充我们在 【基于Java爬…...
反射异常捕获 | InvocationTargetException 要用e.getCause()打印才能看到具体异常
背景:线上某段和反射相关的代码报错了,但是异常信息打印只看到了 InvocationTargetException,没打印具体的异常。就像这样:java.lang.reflect.InvocationTargetException: null 查阅资料后发现要用e.getCause()才能打印具体异常&a…...
【计算机网络】网络版本计算器
此前我们关于TCP协议一直写的都是直接recv或者read,有了字节流的概念后,我们知道这样直接读可能会出错,所以我们如何进行分割完整报文?这就需要报头来解决了! 但当前我们先不谈这个话题,先从头开始。 将会…...
使用 Python 爬虫进行网站流量分析:Referer 头的利用
在互联网时代,网站流量分析是了解用户行为、优化网站结构和提升用户体验的重要手段。本文将介绍如何使用 Python 爬虫技术结合 HTTP Referer 头进行网站流量分析,以及如何实现这一过程。 什么是 HTTP Referer 头? HTTP Referer 头是一个请求…...
梧桐数据库(WuTongDB):数据库技术中LL算法详解
LL 算法是一种自顶向下的语法分析算法,广泛用于构建解析器。LL 分析器逐个读取输入符号,从左到右分析(Left-to-Right),并使用最左推导(Leftmost Derivation)来生成语法树。因此,LL 分…...
【秋招笔试】8.18大疆秋招(第一套)-后端岗
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…...
CSS 的text-size-adjust属性
text-size-adjust 属性在CSS中用于控制用户是否可以调整网页中文字的字体大小。这个属性主要针对移动设备上的浏览器,尤其是那些允许用户通过捏合(pinch)手势来缩放整个页面的浏览器。 语法 text-size-adjust: none; text-size-adjust: aut…...
阿里MAXCOMPUTE数据专辑信息读取并同步数据表
阿里MAXCOMPUTE数据专辑信息读取并同步数据表 在阿里云大数据体系中,我们可以使用数据地图的数据专辑,对数据的类别等进行一个管理 那么管理后的数据,我们想要落表进行相关的数据分析,如何做呢? 查看阿里云官方文档…...
rufus制作ubantu的U盘安装介质时,rufus界面上的分区类型选什么?
rufus制作ubantu的U盘安装介质时,rufus软件界面上的分区类型选什么(如下图)? 在使用Rufus制作Ubuntu的U盘安装介质时,分区类型的选择取决于我们的计算机的引导方式。 以下是具体的选择建议: 1、查看计算机的引导方式…...
【系统架构设计师-2018年】案例分析-答案及详解
试题一(25分) 阅读以下关于软件系统设计的叙述,在答题纸上回答问题1至问题3。 【说明】 某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设…...
linux驱动入门实验班——平台总线设备驱动模型和设备树
目录 前言 一、重要结构体 二、编程思路 1.platform_driver结构体 2.probe 三、使用设备树 1.步进电机 2.红外遥控 四、代码示例 前言 在这里主要记录学习韦东山老师Linux驱动人入门实验班的笔记,韦东山老师的驱动课程讲的非常好,想要学习驱动…...
零基础学习Python(六)
1. 元类的应用 使用元类给对象添加一个固有属性author: 对类名进行限定,要求类名必须是大写字母开头: class MetaC(type):def __init__(cls, name, bases, attrs):if not name.istitle():raise TypeError("类名必须是大写字母开头~")return …...
微信小程序--31(todolist案例)
一.功能 输入待办事件添加代办事件删除代办事件 二、步骤 1.添加输入框 .wxml代码: <!-- 1.输入框 --><input type"text" bindinput"handleInput" value"{{text}}" /> .wxss代码: /* 1.输入框样式 */ i…...
springboot项目使用本地依赖项,打包后出现NoClassDefFoundError的一种解决方法
可以把本地依赖项上传到本地仓库后再引用 建立 Maven 本地仓库并将依赖上传到本地仓库 要建立 Maven 本地仓库并将依赖上传到本地仓库,可以按照以下步骤进行操作: 1. 配置 Maven 本地仓库路径 Maven 默认会在用户的主目录下的 .m2/repository 目录创…...
Maven高级使用指南
在开发大型项目时,Maven作为一个强大的构建和项目管理工具,能显著提升项目管理和构建的效率。然而,随着项目的扩大,维护和管理的复杂性也随之增加。本文将探讨一些高级的Maven用法和解决方案,以帮助你更好地管理大型项…...
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、在进行受害主机排查时,首先要对主机系统进行基本排查,方便对受害主机有一个初步的了解。 3、利用lscpu和uname -a查看系统硬件软件基本…...
Python崛起背后的四大引擎:从数据科学到Web开发的全栈语言进化
1. 从数据看趋势:Python为何成为开发者社区的“流量明星”最近在Stack Overflow上看到一组数据,挺有意思的。数据科学家David Robinson指出,Python已经成为该平台上访问量增长最快的主流编程语言。这个结论不是空穴来风,而是基于对…...
HLS.js技术深度解析:解决浏览器端HLS流媒体播放的工程挑战
HLS.js技术深度解析:解决浏览器端HLS流媒体播放的工程挑战 【免费下载链接】hls.js HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. 项目地址: https://gitcode.com/gh_mirrors/hl/hls.js 在现代Web视频应用中࿰…...
运放噪声深度解析:从原理到工程实践的计算与优化
1. 项目概述:为什么我们需要关心运放的噪声?如果你曾经调试过一个高精度的信号调理电路,比如一个微弱的传感器信号放大链路,或者一个高分辨率的ADC前端,你大概率遇到过这样的场景:理论上,你的电…...
抖音视频批量下载难题如何解决?douyin-downloader开源工具完整指南
抖音视频批量下载难题如何解决?douyin-downloader开源工具完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fa…...
保姆级教程:在Ubuntu 20.04上为ARM开发板(如RK3399)交叉编译Mesa图形库(含完整配置与库路径修复)
ARM开发板图形加速实战:RK3399平台Mesa交叉编译与深度优化指南 在嵌入式系统开发中,图形处理能力往往成为决定用户体验的关键因素。RK3399这类高性能ARM开发板搭载的Mali-T860 GPU,理论上能够提供出色的图形渲染性能,但要将这种潜…...
硅基量子比特稳健控制方案解析与优化
1. 半导体自旋量子比特的稳健量子控制方案解析在硅基量子计算领域,半导体自旋量子比特因其与现有半导体工艺的兼容性和相对较长的相干时间,被视为实现大规模量子计算的有力候选者。然而,量子比特间的持续耦合(always-on couplings…...
终极免费方案:3分钟解决Mac NTFS读写难题的完整指南
终极免费方案:3分钟解决Mac NTFS读写难题的完整指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for …...
终极Cookie本地导出指南:如何安全获取cookies.txt文件
终极Cookie本地导出指南:如何安全获取cookies.txt文件 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发、API测试和自动化脚本…...
因促达促进长高作用原理
因促达促进长高的作用机理:因促达是生长因子促进剂(IGF-1 Promotion)与γ-氨基丁酸骨胶原蛋白肽压片糖果的组合,同时作用于GH-IGF-1生长轴的三个靶点,实现更全面、更直接、更有效的效果。针对生长轴的第一个靶点&#…...
Poppins字体技术解析:跨语言几何字体的架构设计与实战应用
Poppins字体技术解析:跨语言几何字体的架构设计与实战应用 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 在全球化数字产品设计中,如何为多语言用户提供…...
