【发布时间】:2017-03-13 21:42:50
【问题描述】:
我想比较一下
- 表格
- 包含数据类型和长度/精度的列。
- 索引及其列
- 约束
在两个数据库中的模式是相同的。
有这样的东西吗?也许来自其中一种数据库迁移管理工具?
【问题讨论】:
标签: java jdbc compare schema rdbms
我想比较一下
在两个数据库中的模式是相同的。
有这样的东西吗?也许来自其中一种数据库迁移管理工具?
【问题讨论】:
标签: java jdbc compare schema rdbms
我不知道用于架构比较的高级 API 我使用了 DatabaseMetaData 不难发现差异,例如检索所有表,您可以执行以下操作:
DatabaseMetaData meta = con.getMetaData();
ResultSet res = meta.getTables(null, null, null,
new String[] {"TABLE"});
System.out.println("List of tables: ");
while (res.next()) {
System.out.println(
" "+res.getString("TABLE_CAT")
+ ", "+res.getString("TABLE_SCHEM")
+ ", "+res.getString("TABLE_NAME")
+ ", "+res.getString("TABLE_TYPE")
+ ", "+res.getString("REMARKS"));
}
res.close();
以下方法对您的意图也很重要:
getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
getExportedKeys(String catalog, String schema, String table)
getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)
getPrimaryKeys(String catalog, String schema, String table)
【讨论】:
SchemaCrawler 提供了一个 Java API,它将数据库元数据呈现为普通的 Java 对象。虽然没有用于比较数据库元数据对象的 API,但 SchemaCrawler 使用标准 diff 工具生成旨在进行 diff 的文本(文本、JSON、CSV、HTML)输出。
Sualeh Fatehi,SchemaCrawler
【讨论】:
LiquiBase 有 database diff。但我不知道是否有 API,或者只是工具。
【讨论】:
JDBC 是唯一处理数据库的 Java API。
您必须连接到两者,获取它们各自的 DatabaseMetaData,然后比较两者。
【讨论】: