我正在用java开发数据库迁移工具。该工具正在将数据库表及其数据复制到目标数据库。但我希望它能在不同的数据库上工作。从mysql复制并在derby等中创建。使用JDBC,我们可以收集有关表及其列的足够信息。但我会问这个问题,如果我可以在java上使用免费的sql重新创建表。我的意思是不同的数据库有不同的数据类型,有时它们在sql语法上也不同。那么,JDBC或任何其他库(可以是开源的)能以一种简单且全局的方式完成这项工作吗?
发布于 2009-04-20 13:59:26
阿帕奇的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);发布于 2009-04-20 11:32:42
我不知道JDBC有一个通用的工具来做这件事。您可能需要创建一个用于生成表创建表的SQL的实用程序库。
从执行ANSI SQL的一个开始,并在您打算支持的所有平台上对其进行测试。请记住,Java仍然是“一次编写,到处调试”的,所以您需要在您打算支持系统的任何平台上进行测试。如果您必须为您的任何平台创建create语句的辩证变体,则将生成器子类化。
发布于 2009-06-05 14:33:32
试试SchemaCrawler,它也是开源的,并且是用Java语言编写的。它提供了对数据库元数据的编程访问,还允许在JavaScript中编写脚本。http://schemacrawler.sourceforge.net/
https://stackoverflow.com/questions/767846
复制相似问题