Как сравнить две структуры базы данных?
Я использую SQLite / Hibernate. Идея состоит в том, чтобы при каждом запуске приложения проверять актуальность структуры базы данных. У меня есть существующая база данных в папке "БД", и каждый раз, когда запускается приложение, я создаю актуальную базу данных в папке "БД / структура".
Я хочу сравнить их, и если моя существующая база данных устарела, скопируйте данные в актуальную базу данных. Избавьтесь от старой базы данных и переместите новую на ее место.
До сих пор я пробовал SchemaCrawler, но получал ошибки и не мог понять.
ОБНОВИТЬ:
Я подключился к SchemaCrawler к обеим базам данных:
public SchemaConroller() {
SchemaCrawlerOptions options = new SchemaCrawlerOptions();
options.setSchemaInfoLevel(SchemaInfoLevelBuilder.standard());
Catalog catalog1=null;
try {
Connection conn = getConnection();
catalog1 = SchemaCrawlerUtility.getCatalog(conn, options);
for (Schema schema : catalog1.getSchemas()) {
System.out.println(schema);
for (Table table : catalog1.getTables(schema)) {
System.out.println("o--> " + table + " size: "+table.getColumns().size());
/*for (Column column : table.getColumns()) {
System.out.println(" o--> " + column);
}*/
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Catalog catalog2=null;
try {
Connection conn = getConnection2();
catalog2 = SchemaCrawlerUtility.getCatalog(conn, options);
for (Schema schema : catalog2.getSchemas()) {
System.out.println(schema);
for (Table table : catalog2.getTables(schema)) {
System.out.println("o--> " + table + " size: "+table.getColumns().size());
/*for (Column column : table.getColumns()) {
System.out.println(" o--> " + column);
}*/
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(catalog1.equals(catalog2)){
System.out.println(">>>>>>>>>>>>DATABASE IS UP TO DATE<<<<<<<<<<<<<<");
}else{
System.out.println(">>>>>>>>>>>>DATABASE IS OUT OF DATE<<<<<<<<<<<<<<");
}
}
Но я всегда получаю положительный ответ, если я пытаюсь catalog1 == catalog2
- Я всегда получаю негатив. Как правильно сравнить структуру данных?
1 ответ
Alyona,
Пожалуйста, взгляните на schemacrawler-diff, чтобы узнать, как начать работу с программным сравнением структур баз данных. Обратите внимание, что этот код не готов к работе и не поддерживается, поэтому вам следует разработать собственный метод сравнения баз данных, исходя из ваших потребностей.
Суале Фатехи, SchemaCrawler