Как сравнить две структуры базы данных?

Я использую 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

Другие вопросы по тегам