数据库迁移

时间:2009-04-20 11:13:08

标签: java database jdbc migrate

我正在研究java中的数据库迁移工具。该工具将数据库表及其数据复制到目标数据库。但我希望它可以在不同的数据库上工作。从mysql复制并在derby中创建等。使用JDBC,我们可以收集有关表及其列的足够信息。但是我要问这个,如果我可以在sql上用sql重新创建表。我的意思是不同的数据库有不同的数据类型,有时它们在sql语法上有所不同。那么JDBC或任何其他库(可以是开源的)可以轻松全局地完成这项工作吗?

4 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:1)

我不知道JDBC有一个通用的工具来做到这一点。您可能必须创建一个实用程序库来生成用于创建表的SQL。

从一个执行ANSI SQL的程序开始,并在您想要支持的平台上测试它。请记住,Java仍然是一次写入,在任何地方进行调试,因此您需要在任何您打算支持系统的平台上进行测试。如果必须为任何平台创建create语句的辩证变体,则对生成器进行子类化。

答案 2 :(得分:1)

尝试SchemaCrawler,它也是开源的,用Java编写。它提供对数据库元数据的编程访问,还允许使用JavaScript编写脚本。 http://schemacrawler.sourceforge.net/

答案 3 :(得分:0)

试着看看HIBERNATE为迁移提供了什么。 我知道H可以从数据库模式生成模型对象,从模型对象生成模式。所以也许你可以重用HIBERNATE中的一些部分。他们的DIALECT概念完全符合您的要求:定义数据库实现的细节。