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

Java 如何在嵌入式H2数据库引擎运行时进行备份?,java,database,backup,h2,Java,Database,Backup,H2,我想用H2数据库引擎构建一个web应用程序。但是,读完本教程后,我仍然不知道如何在数据库运行时备份数据: H2是否将其存储的文件输出到文件系统中的某个位置?我可以备份输出的文件吗?H2存储在文件系统中,但是最好使用您引用的备份工具,因为文件格式可以在H2的版本之间更改。如果升级H2,它可能无法再读取在以前版本中创建的文件。另外,如果复制它使用的文件,我建议首先关闭数据库,否则复制的文件可能无法被H2读取 文件的位置取决于您指定的JDBCURL。请参阅常见问题解答: 根据,不建议在数据库运行时通

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


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

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

文件的位置取决于您指定的JDBCURL。请参阅常见问题解答:

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


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

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

字符串语句stmt=con.createStatement();;中的原因可能重复;?
 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());
        }
@Modifying
@Transactional
@Query(value = "BACKUP TO ?1", nativeQuery = true)
int backupDB(String path);