Дамп Hibernate-SQLite и импорт через Java - PullRequest
1 голос
/ 17 января 2012

Как я могу использовать Hibernate для резервного копирования моей базы данных sqlite?Выходные данные в идеале должны быть в форме сценария SQL, аналогичного утилите .dump sqlite.

Также для программного восстановления сценария sql.

Ответы [ 3 ]

1 голос
/ 18 января 2012

Я нашел для этого альтернативу, вызвав оболочку командной строки sqlite3 через Java. Вот мой пример решения

public class Test {
  public static void main(String args[]) {
    try {
      String line;
      Process p = Runtime.getRuntime().exec("cmd /c start /b sqlite3 db.sqlite .dump > dump.txt");
      BufferedReader bri = new BufferedReader
        (new InputStreamReader(p.getInputStream()));
      BufferedReader bre = new BufferedReader
        (new InputStreamReader(p.getErrorStream()));
      while ((line = bri.readLine()) != null) {
        System.out.println(line);
      }
      bri.close();
      while ((line = bre.readLine()) != null) {
        System.out.println(line);
      }
      bre.close();
      p.waitFor();
      System.out.println("Done.");
    }
    catch (Exception err) {
      err.printStackTrace();
    }
  }
}
0 голосов
/ 23 октября 2013

Для Unix Flavor cmd не работает, поэтому использовал это для Ubuntu.

      try 
      {
        String line;
        Runtime rt = Runtime.getRuntime();
        Process p = rt.exec(new String[]{"/bin/sh", "-c", "sqlite3 /home/ubuntu/test.sqlite .dump > /home/ubuntu/output.sql"});

        BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
        BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        while ((line = bri.readLine()) != null) {
            System.out.println(line);
        }
        bri.close();
        while ((line = bre.readLine()) != null) {
            System.out.println(line);
        }
        bre.close();
        p.waitFor();
        System.out.println("Done.");
    } catch (Exception err) {
        err.printStackTrace();
    } 
0 голосов
/ 17 января 2012

Насколько мне известно, в Java нет механизма для выполнения дампа SQL.Но вы могли бы создать программу, чтобы сделать это довольно легко:

  1. Итерация по списку ваших сущностей - возможно, построенная с использованием отражения.
  2. Получить список имен столбцов, используя JDBC direct (на самом деле это нельзя сделать с помощью hibernate).
  3. Затем, создав запрос на выборку, вы передаете имя объекта в качестве параметра.
  4. Выполните итерацию по набору результатов и отправьте данные через отформатированную строку в файл.

Вы, конечно, можете добавить DROP IF EXISTS перед каждым CREATE, если это необходимо.

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