4


3

データベーススキーマを比較するためのJava APIはありますか

私が比較したい場合

  • テーブル

  • データ型と長さ/精度を含む列。

  • インデックスとその列

  • 制約

2つのデータベーススキーマは同一です。

このようなものはありますか? データベース移行管理ツールの1つからでしょうか?

4 Answer


3


DatabaseMetaDataを使用したスキーマ比較用の高レベルAPIがわからないすべてのテーブルを取得するには、次のようなことができます。

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)


2


LiquiBaseにはhttp://www.liquibase.org/documentation/diff.html[database diff]があります。 しかし、APIがあるのか​​ツールだけなのかはわかりません。


2


http://www.SchemaCrawler.com [SchemaCrawler]は、データベースメタデータを従来のJavaオブジェクトとして提示するJava APIを提供します。 データベースメタデータオブジェクトを比較するAPIはありませんが、SchemaCrawlerは標準のdiffツールを使用して、diff-edするように設計されたテキスト(テキスト、JSON、CSV、HTML)出力を生成します。

Sualeh Fatehi、SchemaCrawler


1


JDBCは、データベースを扱う唯一のJava APIです。

両方に接続し、それぞれのDatabaseMetaDataを取得して、2つを比較する必要があります。