是否有用于比较数据库架构的Java API

时间:2010-08-16 17:14:38

标签: java jdbc compare schema rdbms

我想比较一下

  • 表格
  • 包括数据类型和长度/精度的列。
  • 索引及其列
  • 约束

在两个数据库模式中是相同的。

有这样的东西吗?可能来自其中一个数据库迁移管理工具?

4 个答案:

答案 0 :(得分:3)

我不知道用于架构比较的高级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) 

答案 1 :(得分:2)

LiquiBasedatabase diff。但我不知道是否有API,或只是工具。

答案 2 :(得分:2)

SchemaCrawler提供了一个Java API,它将数据库元数据显示为普通的Java对象。虽然没有用于比较数据库元数据对象的API,但SchemaCrawler使用标准差异工具生成设计为差异的文本(文本,JSON,CSV,HTML)输出。

Sualeh Fatehi,SchemaCrawler

答案 3 :(得分:1)

JDBC是唯一处理数据库的Java API。

您必须连接两者,获取各自的DatabaseMetaData,然后比较两者。