Как запустить импортированный скрипт sql в JPA, используя H2? - PullRequest
0 голосов
/ 28 февраля 2020

Я разрабатываю приложение JPA, которое использует H2 для базы данных. Я хочу создать резервную копию (экспортировать как sql файл) и импортировать резервную копию из веб-интерфейса.

Создание резервного файла sql и загрузка файла sql работают, но я не могу заставить entityManager правильно выполнить импортированный файл sql.

Я попытался создать файл из импортированного sql и затем запустить его следующим образом:

public void applyBackup() {
    em.flush();
    Query query = em.createNativeQuery("DROP ALL OBJECTS");
    query.executeUpdate();

    query = em.createNativeQuery("RUNSCRIPT FROM 'backup.sql'");
    query.executeUpdate();
}

Проблема в том, что файл, который я создал из импортированного sql, находится в папке сервера, а запрос RUNSCRIPT пытается запустить его из папки проекта.

Моя вторая попытка - разобрать sql в строку и затем выполнить ее как sql команду:

  public void applyBackup(String sqlStr) {
    em.flush();
    Query query = em.createNativeQuery("DROP ALL OBJECTS");
    query.executeUpdate();

    query = em.createNativeQuery(sqlStr);
    query.executeUpdate();
}

Это не вызывает исключение во время выполнения, но когда я попробуйте вытащить данные из базы данных, там написано, что таблица xy не найдена.

Для создания резервной копии я использую следующий запрос:

  Query query = em.createNativeQuery("SCRIPT TO 'backup.sql'");

Как описано здесь .

1 Ответ

0 голосов
/ 28 февраля 2020

Я проанализировал InputStream файла UploadedFile со сканером, который испортил SQL.

...