【小工具】对比DB库中所有表字段的差异,导出csv文件

该博客介绍了一个自定义的Java工具类,用于对比两个MySQL数据库之间的表结构差异,并将结果导出为CSV文件。工具考虑了字段差异、字段类型、是否允许为空、默认值和注释等细节,适用于不同环境下的数据库一致性检查。通过Hutool库实现了Excel文件的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对比DB库中所有表差异,导出csv文件

平时工作中会要求对比不同环境下的DB库中所有表的差异,包含字段差异、字段类型、字段注释、字段默认值等,网上查了很多资料发现并不能很好的满足我的要求,最终搞了一下把这些差异生成CSV文件

最终成品如下

在这里插入图片描述

废话不多说,直接上代码

package com.xx.xx.xx.utility;



import cn.hutool.core.collection.CollUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.StyleSet;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.springframework.jdbc.core.JdbcTemplate;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;


public class DBDiffUtil {
   

    static final String Å="xxx";
    static final String SGDBName="xxxx";

    static final String SIT1 = "jdbc:mysql://xxxx:xx/"+IDDBName+"?useSSL=false";
    static final String SIT3 = "jdbc:mysql://xxx:xx/"+SGDBName+"?useSSL=false";

    static final String tableSql =
            "SELECT  TABLE_SCHEMA,TABLE_NAME, " +
                    "    TABLE_COMMENT  FROM " +
                    "    information_schema.`TABLES` " +
                    "WHERE " +
                    "    TABLE_SCHEMA = '%s'";

    static final String schemaSQL = "SELECT " +
            "COLUMN_NAME,DATA_TYPE,IS_NULLABLE,COLUMN_DEFAULT ,COLUMN_COMMENT " +
            "FROM   INFORMATION_SCHEMA.COLUMNS " +
            "where  table_schema = '%s' AND  table_name = '%s'";

    private static JdbcTemplate db1;
    private static JdbcTemplate db2;

    static {
   
        db1 = new JdbcTemplate();
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(SIT1);
        dataSource.setUsername("xxx");
        dataSource.setPassword("xxx");
        db1.setDataSource(dataSource);


        db2 = new JdbcTemplate();
        DruidDataSource dataSource2 = new DruidDataSource();
        dataSource2.setUrl(SIT3);
        dataSource2.setUsername("xxx");
        dataSource2.setPassword("xxx");
        db2.setDataSource(dataSource2);
    }

    public static void main(String[] args) throws IOException {
   
        Set<String> idTables = db1.queryForList(String.format(tableSql, IDDBName)).stream().map(e -> e.get("TABLE_NAME").toString()).collect(Collectors.toSet());
        Set<String> sgTables = db2.queryForList(String.format(tableSql, SGDBName)).stream().map(e -> e.get("TABLE_NAME").toString()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值