4

我已創建使用下面的代碼,我的內存數據庫的備份的Apache Derby:恢復內存數據庫

public static void backUpDatabase(Connection conn)throws SQLException 
{ 
String backupdirectory ="c:/mybackups/"+JCalendar.getToday(); 
CallableStatement cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)"); 
cs.setString(1, backupdirectory); 
cs.execute(); 
cs.close(); 
System.out.println("backed up database to "+backupdirectory); 
} 

現在我想從以前的備份創建內存數據庫恢復數據庫。我應該怎麼做?

謝謝。

回答

3

我知道的最快方法:

首先,使用shutdown=true

boolean gotSQLExc = false; 
    try { 
     DriverManager.getConnection("jdbc:derby:memory:testdb;shutdown=true"); 
    } catch (SQLException se) { 
     if (se.getSQLState().equals("08006")) 
      System.out.println("Database shut down normally"); 
     else 
      System.out.println("Database did not shut down normally") 
    } 

然後restoreFrom=

Connection connection = DriverManager.getConnection("jdbc:derby:memory:testdb;restoreFrom=path/to/backup/file"); 
    connection.close(); 

一個包含約300個表的數據庫,其中一些示例數據在我的開發機器上以〜150ms恢復。

這對於需要快速快速恢復數據庫的junit集成測試非常有用。根據您的設置,您可能需要在兩次測試之間執行一些額外的工作,例如,如果使用c3p0連接池,則需要從C3P0Registry獲取所有連接,並在此恢復後調用hardReset()。另一方面,其他一些池也不需要做任何事情。