一尘不染

数据库迁移

java

我正在使用Java开发数据库迁移工具。该工具将数据库表及其数据复制到目标数据库。但是我希望它可以在不同的数据库上工作。从mysql复制并在derby等中创建。使用JDBC,我们可以收集有关表及其列的足够信息。但是我要问的是,是否可以使用sql
free在Java上重新创建表。我的意思是不同的数据库具有不同的数据类型,有时它们在sql语法上也有所不同。那么JDBC或任何其他库(可以是开放源代码)能否以一种简单且全局的方式完成这项工作?


阅读 160

收藏
2020-12-03

共1个答案

一尘不染

Apache的DdlUtils完成了我所需要的。当我搜索crossdb时发现它,它非常有用,但功能强大。它可以使用参数从头开始生成数据库。或者,它也可以获取现有数据库表定义以及索引定义。您可以根据需要使用定界符(使用Apache
Derby对我来说是一个致命的重要选择)。您可以只打印出这些定义,也可以将它们直接应用于源数据库(我还没有尝试过第二个定义)。它转换所选数据库的定义。但是一个大问题是,没有关于如何开始使用它的好的教程。我搜索了软件包,找到了一个很好的起点。这是我所实现的,生成完整数据库表创建sql的示例代码。

DerbyPlatform dp = new DerbyPlatform();
dp.setDelimitedIdentifierModeOn(true);
Database dbs = new Database();
DerbyModelReader dmr = new DerbyModelReader(dp);
Database test = dmr.getDatabase(conn, "MyDBTest");

DerbyBuilder db = new DerbyBuilder(dp);
String testSqlDerby = dp.getCreateTablesSql(test, true, true);
System.out.println(testSqlDerby);

System.out.println("\n\n\n\n");

MySql50Platform mp = new MySql50Platform();
mp.setDelimitedIdentifierModeOn(true);
MySqlBuilder mb = new MySqlBuilder(mp);
String testSqlMysql = mp.getCreateTablesSql(test, true, true);
System.out.println(testSqlMysql);
2020-12-03