繁体   English   中英

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

[英]How to back up the embedded H2 database engine while it is running?

我想用 H2 数据库引擎构建一个 Web 应用程序。 但是,读了这篇教程后,我仍然不知道如何在数据库运行时备份数据:

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

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

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

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

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

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

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

@Modifying
@Transactional
@Query(value = "BACKUP TO ?1", nativeQuery = true)
int backupDB(String path);
 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());
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM