Thanks to visit codestin.com
Credit goes to github.com

Skip to content

将源数据库的表迁移到目标数据库的表,支持mysql、postgresql,支持多个表迁移

Notifications You must be signed in to change notification settings

eagleLiu82/tableTrans

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

数据库表数据迁移工具

该工具支持将一个数据库表的数据迁移到另一个数据库的表中,支持同名和不同名表,默认同名;支持删除目标后拷贝、更新、忽略三种方式;支持 MySQL、PostgreSQL、Microsoft SQL Server 和 Oracle。

功能特点

  1. 支持同名表和不同名表的数据迁移
  2. 支持多表同时迁移
  3. 支持三种迁移模式:
    • DELETE_THEN_COPY: 删除目标表数据后拷贝
    • UPDATE: 更新模式(默认模式)
    • IGNORE: 忽略模式(如果目标表有数据则跳过)
  4. 支持 MySQL、PostgreSQL、Microsoft SQL Server 和 Oracle 数据库
  5. 提供图形用户界面(GUI)和命令行界面
  6. 支持配置保存和加载
  7. 表格编辑支持双击直接编辑
  8. 支持配置文件保存和加载(.dat格式)

数据库驱动

本工具已内置以下数据库驱动:

  • MySQL Connector/J 8.0.33
  • PostgreSQL JDBC Driver 4.2.6.0
  • Microsoft SQL Server JDBC Driver 12.4.0
  • Oracle JDBC Driver 23.2.0.0

无需额外安装数据库驱动,可直接连接MySQL、PostgreSQL、Microsoft SQL Server和Oracle数据库。

使用方法

详细使用说明请查看 USAGE.md 文件。

1. 配置依赖

确保 pom.xml 中包含了所需的依赖项:

<dependencies>
    <!-- MySQL Connector -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version>
    </dependency>

    <!-- PostgreSQL Connector -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.6.0</version>
    </dependency>
    
    <!-- MSSQL Connector -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>12.4.0.jre8</version>
    </dependency>
    
    <!-- Oracle Connector -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>23.2.0.0</version>
    </dependency>
</dependencies>

2. 编译和打包

# 编译项目
mvn clean compile

# 打包为可执行jar
mvn clean package

# 跳过测试打包(如果测试失败但代码可以正常运行)
mvn clean package -DskipTests

3. 运行程序

# 显示帮助信息
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar --help

# 启动图形用户界面(GUI)
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar

# 命令行模式示例(MySQL到PostgreSQL)
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:mysql://localhost:3306/source_db \
  -sourceUsername root \
  -sourcePassword password \
  -sourceDbType MYSQL \
  -targetUrl jdbc:postgresql://localhost:5432/target_db \
  -targetUsername postgres \
  -targetPassword password \
  -targetDbType POSTGRESQL \
  -sourceTable users \
  -mode DELETE_THEN_COPY

# 命令行模式示例(MSSQL到MSSQL)
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:sqlserver://localhost:1433;databaseName=source_db;encrypt=false \
  -sourceUsername sa \
  -sourcePassword password \
  -sourceDbType MSSQL \
  -targetUrl jdbc:sqlserver://localhost:1433;databaseName=target_db;encrypt=false \
  -targetUsername sa \
  -targetPassword password \
  -targetDbType MSSQL \
  -sourceTable users \
  -mode DELETE_THEN_COPY

# 命令行模式示例(Oracle到MySQL)
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:oracle:thin:@localhost:1521:xe \
  -sourceUsername system \
  -sourcePassword password \
  -sourceDbType ORACLE \
  -targetUrl jdbc:mysql://localhost:3306/target_db \
  -targetUsername root \
  -targetPassword password \
  -targetDbType MYSQL \
  -sourceTable users \
  -mode DELETE_THEN_COPY

# 测试数据库驱动
java -cp target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar com.datatrans.example.DatabaseConnectionTest

4. 命令行使用(单表)

# MySQL到MSSQL
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:mysql://localhost:3306/source_db?useSSL=false \
  -sourceUsername root \
  -sourcePassword password \
  -sourceDbType MYSQL \
  -targetUrl jdbc:sqlserver://localhost:1433;databaseName=target_db;encrypt=false \
  -targetUsername sa \
  -targetPassword password \
  -targetDbType MSSQL \
  -sourceTable users \
  -mode DELETE_THEN_COPY

# PostgreSQL到MSSQL
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:postgresql://localhost:5432/source_db \
  -sourceUsername postgres \
  -sourcePassword password \
  -sourceDbType POSTGRESQL \
  -targetUrl jdbc:sqlserver://localhost:1433;databaseName=target_db;encrypt=false \
  -targetUsername sa \
  -targetPassword password \
  -targetDbType MSSQL \
  -sourceTable users \
  -mode DELETE_THEN_COPY

# Oracle到MySQL
java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:oracle:thin:@localhost:1521:xe \
  -sourceUsername system \
  -sourcePassword password \
  -sourceDbType ORACLE \
  -targetUrl jdbc:mysql://localhost:3306/target_db \
  -targetUsername root \
  -targetPassword password \
  -targetDbType MYSQL \
  -sourceTable users \
  -mode DELETE_THEN_COPY

5. 命令行使用(多表)

java -jar target/data-transfer-1.0-SNAPSHOT-jar-with-dependencies.jar \
  -sourceUrl jdbc:mysql://localhost:3306/source_db?useSSL=false \
  -sourceUsername root \
  -sourcePassword password \
  -sourceDbType MYSQL \
  -targetUrl jdbc:postgresql://localhost:5432/target_db \
  -targetUsername postgres \
  -targetPassword password \
  -targetDbType POSTGRESQL \
  -sourceTable users,orders,products \
  -targetTable staff,order_records,items \
  -mode DELETE_THEN_COPY

6. 编程接口使用(单表)

在代码中配置迁移参数:

TransferConfig config = new TransferConfig();

// 源数据库配置
config.setSourceUrl("jdbc:mysql://localhost:3306/source_db");
config.setSourceUsername("root");
config.setSourcePassword("password");
config.setSourceDbType(DatabaseType.MYSQL);

// 目标数据库配置
config.setTargetUrl("jdbc:postgresql://localhost:5432/target_db");
config.setTargetUsername("postgres");
config.setTargetPassword("password");
config.setTargetDbType(DatabaseType.POSTGRESQL);

// 表配置(单表)
config.setSourceTable("users");
config.setTargetTable("users"); // 同名表可省略

// 迁移模式
config.setTransferMode(TransferMode.DELETE_THEN_COPY);

// 执行迁移
DataTransferService service = new DataTransferService();
service.transfer(config);

7. 编程接口使用(多表)

TransferConfig config = new TransferConfig();

// 源数据库配置(Oracle示例)
config.setSourceUrl("jdbc:oracle:thin:@localhost:1521:xe");
config.setSourceUsername("system");
config.setSourcePassword("password");
config.setSourceDbType(DatabaseType.ORACLE);

// 目标数据库配置
config.setTargetUrl("jdbc:postgresql://localhost:5432/target_db");
config.setTargetUsername("postgres");
config.setTargetPassword("password");
config.setTargetDbType(DatabaseType.POSTGRESQL);

// 表配置(多表)
config.addTableMapping("users", "staff");     // 不同名表
config.addTableMapping("orders");             // 同名表,目标表名默认等于源表名
config.addTableMapping("products", "items");  // 不同名表

// 迁移模式
config.setTransferMode(TransferMode.DELETE_THEN_COPY);

// 执行迁移
DataTransferService service = new DataTransferService();
service.transfer(config);

代码结构

src/
├── main/
│   ├── java/
│   │   └── com/datatrans/
│   │       ├── App.java                  # 命令行程序入口
│   │       ├── config/
│   │       │   └── TransferConfig.java   # 配置类
│   │       ├── exception/
│   │       │   └── TransferException.java # 自定义异常
│   │       ├── service/
│   │       │   ├── DatabaseService.java   # 数据库连接服务
│   │       │   └── DataTransferService.java # 数据迁移服务
│   │       └── ui/
│   │           └── DataTransferGUI.java   # 图形用户界面
│   └── resources/
└── test/
    └── java/
        └── com/datatrans/
            ├── DataTransferIntegrationTest.java # 集成测试
            ├── config/
            │   └── TransferConfigTest.java      # 配置类测试
            ├── exception/
            │   └── TransferExceptionTest.java   # 异常类测试
            └── service/
                ├── DatabaseServiceTest.java     # 数据库服务测试
                └── DataTransferServiceTest.java # 数据迁移服务测试

测试

项目包含完整的单元测试和集成测试。使用以下命令运行测试:

# 运行所有测试
mvn test

# 运行特定测试类
mvn test -Dtest=com.datatrans.config.TransferConfigTest

# 生成测试报告
mvn verify

扩展功能

  1. 可以通过添加命令行参数解析功能来支持命令行直接运行
  2. 可以增加更多的迁移模式实现
  3. 可以添加数据校验功能
  4. 可以增加批量处理和事务支持

About

将源数据库的表迁移到目标数据库的表,支持mysql、postgresql,支持多个表迁移

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages