数据库迁移

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

Apache的DdlUtils完成了我需要的工作。 当我在搜索crossdb时发现它,它非常有用但function强大。 它可以从头开始生成一个数据库,只需要参数。 或者它也可以使用索引定义来获取现有的数据库表定义。 如果需要,可以使用分隔符(对我来说,使用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); 

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

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

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

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