该工具支持将一个数据库表的数据迁移到另一个数据库的表中,支持同名和不同名表,默认同名;支持删除目标后拷贝、更新、忽略三种方式;支持 MySQL、PostgreSQL、Microsoft SQL Server 和 Oracle。
- 支持同名表和不同名表的数据迁移
- 支持多表同时迁移
- 支持三种迁移模式:
- DELETE_THEN_COPY: 删除目标表数据后拷贝
- UPDATE: 更新模式(默认模式)
- IGNORE: 忽略模式(如果目标表有数据则跳过)
- 支持 MySQL、PostgreSQL、Microsoft SQL Server 和 Oracle 数据库
- 提供图形用户界面(GUI)和命令行界面
- 支持配置保存和加载
- 表格编辑支持双击直接编辑
- 支持配置文件保存和加载(.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 文件。
确保 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># 编译项目
mvn clean compile
# 打包为可执行jar
mvn clean package
# 跳过测试打包(如果测试失败但代码可以正常运行)
mvn clean package -DskipTests# 显示帮助信息
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# 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_COPYjava -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在代码中配置迁移参数:
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);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- 可以通过添加命令行参数解析功能来支持命令行直接运行
- 可以增加更多的迁移模式实现
- 可以添加数据校验功能
- 可以增加批量处理和事务支持