2012-01-17 2 views
1

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

Кроме того, для программного восстановления скрипта sql.

ответ

1

Я нашел альтернативу для этого, и это вызвано оболочкой командной строки 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

но сгенерированный файл не существует Инструкция "DROP TABLE IF EXISTS"? то как добавить этот оператор в сгенерированный sql? –

0

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

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

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

1

Для 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(); 
    } 
Смежные вопросы