在Java代码中备份和恢复Hsqldb数据库

时间:2014-06-24 05:41:20

标签: java sql backup hsqldb

我是Hsqldb数据库的新手。我想知道如何通过java代码备份和恢复Hsqldb数据库。

3 个答案:

答案 0 :(得分:3)

使用BACKUP DATABASE TO命令。

以下是文档的链接:

HSQLDB System Management Documentation

我没有对此进行过测试,但我认为这有点像:

String backup = "BACKUP DATABASE TO " + "'" + filePath + "' BLOCKING";

PreparedStatement preparedStatement = connection.prepareStatement(backup);  

preparedStatement.execute();

你当然希望将它包装在try-catch块中。

就恢复数据库而言,我认为您必须在数据库使用DbBackupMain应用程序脱机时执行此操作。因此,您将在命令行发出此命令:

java -cp hsqldb.jar org.hsqldb.lib.tar.DbBackupMain --extract tardir/backup.tar dbdir

答案 1 :(得分:2)

每个 HyperSQL数据库称为目录。根据数据的存储方式,有三种类型的目录。

目录数据的类型

mem :完全存储在RAM中 - 没有超出JVM进程生命的任何持久性

文件:存储在文件系统文件中

res :存储在Java资源中,例如Jar,并且始终是只读的

要备份正在运行的目录,请获取JDBC连接并在SQL中发出BACKUP DATABASE命令。在最简单的形式中,下面的命令格式将数据库作为单个.tar.gz文件备份到给定目录。

BACKUP DATABASE TO <directory name> BLOCKING [ AS FILES ]

目录名必须以斜杠结尾以将其区分为目录,并且整个字符串必须使用单引号,如下所示:&#39; subdir / nesteddir /&#39;。

要备份脱机目录,目录必须处于关闭状态。您将运行像

这样的Java命令
 java -cp hsqldb.jar org.hsqldb.lib.tar.DbBackupMain --save tardir/backup.tar dbdir/dbname

。在此示例中,数据库名为dbname,位于dbdir目录中。备份将保存到tardir目录中名为backup.tar的文件中。

其中tardir / backup.tar是要在文件系统中创建的* .tar或* .tar.gz文件的文件路径,dbdir / dbname是目录文件基本名称的文件路径。

您可以在操作系统命令行上使用DbBackup从备份还原目录。

java -cp hsqldb.jar org.hsqldb.lib.tar.DbBackupMain --extract tardir/backup.tar dbdir

其中tardir / backup.tar是要读取的* .tar或* .tar.gz文件的文件路径,dbdir是将目录文件解压缩到的目标目录。请注意,dbdir指定目录路径,而不指定目录文件基本名称。将使用存储在tar文件中的名称创建文件。 有关详细信息refer

答案 2 :(得分:0)

所以在java + SPring + JdbcTemplate

备份(在线):

@Autowired
public JdbcTemplate jdbcTemplate;

public void mainBackupAndRestore() throws IOException {
  ...
    jdbcTemplate.execute("BACKUP DATABASE TO '" + sourceFile.getAbsolutePath() + "' BLOCKING");
}

这会将.properties,.scripts和.lobs文件保存到sourceFile.getAbsolutePath()中的tar。

<强>恢复

DbBackupMain.main(new String[] { "--extract", baseDir.getAbsolutePath(),
                    System.getProperty("user.home") + "/restoreFolder" });

这将从baseDir.getAbsolutePath()获取文件,并将它们放在userHome / restoreFolder中,您可以在其中检查所有还原是否正常。 lobs包含lob / blob数据,脚本包含已执行的查询。

enter image description here