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