我使用以下代码创建了内存数据库的备份:

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);
}

现在,我想通过从以前的备份中创建内存数据库来还原数据库。我该怎么办?

谢谢。

最佳答案

我知道的最快方法:

首先,使用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个表的数据库,并在约150毫秒内以这种方式在我的开发机上恢复了一些示例数据。

这对于需要快速快速恢复数据库的junit集成测试非常有用。根据您的设置,您可能需要在测试之间执行一些其他工作,例如,如果使用c3p0连接池,则需要从C3P0Registry获取所有连接,并在此还原后调用hardReset()。另一方面,其他一些池不需要执行任何操作。

10-04 23:35
查看更多