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

news/2024/11/15 5:23:00/

达梦表字段、字段类型,精度比对及更改字段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代码
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");}}

http://www.ppmy.cn/news/1513921.html

相关文章

JavaEE:http请求 | 同步与异步请求 | 跨域问题 | axios框架 有这一篇就够!

前言 HTTP请求是现代Web开发中前后端沟通的基础。在开发过程中&#xff0c;开发者面临同步与异步请求的选择、跨域问题的挑战以及选择合适的HTTP库等问题。同步请求简单却往往阻塞用户界面&#xff0c;而异步请求能提高效率但增加复杂性。跨域问题则源自浏览器的同源政策&…

大模型,读论文,提示词:让任何人,任何时间,读懂,任何领域,任何论文

大模型&#xff0c;读论文&#xff0c;提示词&#xff1a;让任何人&#xff0c;任何时间&#xff0c;读懂&#xff0c;任何领域&#xff0c;任何论文 为什么要读论文&#xff1f;使用装备秒懂大纲提出背景结构化分析问题解法拆解到点全流程分析画出分析性关联图理解数学公式创意…

如何从电脑/外部硬盘驱动器/USB 驱动器/内存卡恢复数据?

奇客数据恢复软件将向您展示如何使用此 PC 模块从桌面、回收站、特定文件夹、逻辑驱动器、丢失的分区和未分配的空间中检索已删除的文件。 此 PC 显示您 PC 上所有检测到的驱动器和设备&#xff0c;包括外部硬盘驱动器、可移动 USB 驱动器、内存卡等。 您可以从逻辑分区、损坏…

【Qt从摄像头视频中获取数据】

有时候需要在视频上画图&#xff0c;所以需要能获取到每一帧视频数据。 以前从视频文件或视频流中得到帧&#xff0c;一般都是使用qt ffmpeg或qt vlc。 qt对显示处理视频大体有以下方法&#xff1a; QMediaPlayer QVideoWidget 这种方法只适合简单的显示视频功能&#xff…

亚信科技转型持久战:扎根行业大模型,深耕行业数字化

有人说&#xff1a;“AI大模型时代&#xff0c;每个行业和产品都值得重新做一遍。” 深以为然。自大模型2023年迅速崛起以来&#xff0c;AI技术不断取得突破&#xff0c;并开始深刻影响多个领域。这其中&#xff0c;AI大模型如何从通用走向垂直行业成为当下产业界最为关心的话…

工业和信息化部教育与考试中心计算机相关专业介绍

国家工信部的认证证书在行业内享有较高声誉。 此外&#xff0c;还设有专门的工业和信息化技术技能人才数据库查询服务&#xff0c;进一步方便了个人和企业对相关职业能力证书的查询需求。 序号 专业工种 级别 备注 1 JAVA程序员 初级 职业技术 2 电子…

《黑神话.悟空》:一场跨越神话与现实的深度探索

《黑神话.悟空》&#xff1a;一场跨越神话与现实的深度探索 在国产游戏日益崛起的今天&#xff0c;《黑神话.悟空》以其独特的剧情、丰富的人物设定和深刻的主题&#xff0c;成为了无数玩家翘首以盼的国产3A大作。这款游戏不仅是一次对传统故事的创新演绎&#xff0c;更是一场对…

基于vmware安装Linux-CentOS7.9

1.系统安装 系统&#xff1a;CentOS7 2009 x86_64 1.1VMware基本设置 1.1.1 网络设置 1.编辑-虚拟网络编辑器 2.将子网Ip修改为:10.0.0.0 3.选择NAT设置 4.将网关ip设置为&#xff1a;10.0.0.2 1.1.2虚拟机的创建 1.选择&#xff1a;文件-新建虚拟机 2.典型 3.稍后安装系统…