嵌入式H2数据库引擎运行时如何备份?

问题描述 投票:0回答:4

我想用H2数据库引擎构建一个Web应用程序。不过看完这个教程我还是不知道如何在数据库运行时备份数据:

http://www.h2database.com/html/tutorial.html#upgrade_backup_restore

H2是否将其存储的文件输出到文件系统中的某个位置?我可以只备份输出的文件吗?

java database backup h2
4个回答
14
投票

H2 存储在文件系统上,但最好使用您引用的备份工具,因为文件格式可能会在 H2 版本之间发生变化。如果您升级 H2,它可能无法再读取在先前版本中创建的文件。另外,如果你复制它使用的文件,我建议先关闭数据库,否则复制的文件可能无法被H2读取。

文件的位置取决于您指定的 jdbc url。请参阅常见问题解答: http://www.h2database.com/html/faq.html


14
投票

根据您链接的教程,不建议通过在运行时复制文件来备份数据库。这是在数据库运行时备份数据库的正确方法(Scala 代码,但可以轻松转换为 Java)(Source):

val connection:java.sql.Connection = ??? // get a database connection 
connection.prepareStatement("BACKUP TO 'myFile.zip'").executeUpdate 

6
投票

感谢 Jus12 的好回答。我将其改编为 Spring Data 中的 JPARepositories,并想在这里分享它,因为我在网上找不到类似的答案:

@Modifying
@Transactional
@Query(value = "BACKUP TO ?1", nativeQuery = true)
int backupDB(String path);

0
投票
try {
    Class.forName("org.h2.Driver");
    Connection con = DriverManager.getConnection("jdbc:h2:"+"./Dbfolder/dbname", "username", "password" );
    Statement stmt = con.createStatement();
    con.prepareStatement("BACKUP TO 'backup.zip'").executeUpdate();

} catch(Exception ex) {
    JOptionPane.showMessageDialog(null, ex.toString());
}
© www.soinside.com 2019 - 2024. All rights reserved.