Шаблон для создания схемы базы данных с использованием JDBC - PullRequest
1 голос
/ 26 мая 2010

У меня есть Java-приложение, которое загружает данные из устаревшего формата файла в базу данных SQLite, используя JDBC. Если указанный файл базы данных не существует, он должен создать новый. В настоящее время схема для базы данных жестко задана в приложении. Я бы предпочел иметь его в отдельном файле в виде SQL-скрипта, но, по-видимому, нет простого способа выполнить SQL-скрипт через JDBC. Есть ли другой способ или шаблон для достижения чего-то подобного?

Ответы [ 3 ]

5 голосов
/ 26 мая 2010

Ваше предложение "теперь есть простой способ выполнить SQL-скрипт, хотя JDBC" смутил меня на минуту, но я считаю, что вы говорите "есть нет легкий путь ". :)

Исходя из того, что говорили другие, да ... сценарий идеального мира - это использование инструмента ORM, такого как Hibernate, но я также понимаю тот факт, что когда вы работаете с устаревшими вещами на работе, ваша команда может не захотеть потратить слишком много времени на рефакторинг этого проекта.

Я согласен с тем, что вам следует преобразовать схему базы данных в отдельный файл. Вы можете фактически выполнить сценарий SQL, используя JDBC. Я делаю это все время, когда запускаю определенные тестовые сценарии.

Вот как я это делаю. Я использую базу данных SQL Server в моем случае. Итак, вам нужно настроить код под свои нужды.

String ddl = ... // load your SQL script file into this string
String delimiter = "GO"; // in my case, SQL Server uses GO as delimiter, you use whatever you want here.


private void executeDDL(String ddl, String delimiter) {
    Connection con = null;

    try {
        con = ... // get the connection

        // enable transaction
        con.setAutoCommit(false);

        Statement statement = con.createStatement();

        // for every DDL statement, execute it
        for (String sql : ddl.split(delimiter)) {
            if (StringUtils.isNotBlank(sql)) {
                statement.executeUpdate(sql);
            }
        }

        statement.close();
        con.commit();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
            con.close();
        }
        catch (Exception ignored) {
        }
    }
}
0 голосов
/ 26 мая 2010

Если вы работаете в среде разработки, я бы посоветовал вам использовать инструмент ORM, такой как Hibernate, который направляет инженеров на основе ваших доменных моделей Java для создания таблиц БД. Hibernate имеет функцию автоматического создания / обновления таблиц в случае изменения схемы БД.

Поскольку вы используете SQLite, вы можете взглянуть на Hibernate для SQLite

Я где-то читал, что не рекомендуется использовать эту функцию в производственной среде, поскольку создание инкрементной таблицы может отрицательно повлиять на существующие данные.

0 голосов
/ 26 мая 2010

«Правильный» способ - использовать Hibernate. Среди всех других преимуществ он способен автоматически создавать / обновлять схему БД ( SO1 , SO2 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...