Есть ли Java API для сравнения схем баз данных - PullRequest
4 голосов
/ 16 августа 2010

Я бы хотел сравнить, если

  • таблицы
  • столбцы, включая типы данных и длину / точность.
  • индексы и их столбцы
  • 1010 * Ограничения *

в двух схемах базы данных идентичны.

Есть ли что-нибудь подобное? Может быть, из одного из инструментов управления миграцией базы данных?

Ответы [ 4 ]

3 голосов
/ 16 августа 2010

Я не знаю API высокого уровня для сравнения схем, который я использовал DatabaseMetaData Нетрудно найти различия ig, чтобы восстановить все таблицы, вы можете сделать что-то вроде этого:

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 голосов
/ 12 июля 2012

SchemaCrawler предоставляет API Java, который представляет метаданные базы данных в виде простых старых объектов Java.Хотя нет API для сравнения объектов метаданных базы данных, но SchemaCrawler создает вывод текста (текст, JSON, CSV, HTML), который предназначен для отображения с использованием стандартных инструментов сравнения.

Sualeh Fatehi, SchemaCrawler

2 голосов
/ 16 августа 2010

LiquiBase имеет diff базы данных .Но я не знаю, есть ли API или просто инструмент.

1 голос
/ 16 августа 2010

JDBC - единственный API Java, который работает с базами данных.

Вам нужно подключиться к обоим, получить их соответствующие DatabaseMetaData и сравнить их.

...