如何使用H2在JPA中运行导入的sql脚本



我正在开发一个JPA应用程序,该应用程序使用H2作为数据库。我想创建一个备份(导出为sql文件(并从Web界面导入一个备份。

备份sql文件的创建和sql文件的上传正在进行,但我无法获得entityManager以正确执行导入的sql文件。

我尝试从导入的sql创建一个文件,然后按如下方式运行:

public void applyBackup() {
em.flush();
Query query = em.createNativeQuery("DROP ALL OBJECTS");
query.executeUpdate();
query = em.createNativeQuery("RUNSCRIPT FROM 'backup.sql'");
query.executeUpdate();
}

这里的问题是,我从导入的sql创建的文件位于服务器文件夹中,而RUNSCRIPT查询尝试从项目文件夹中运行它。

我的第二次尝试是将sql解析为字符串,然后将其作为sql命令执行:

public void applyBackup(String sqlStr) {
em.flush();
Query query = em.createNativeQuery("DROP ALL OBJECTS");
query.executeUpdate();
query = em.createNativeQuery(sqlStr);
query.executeUpdate();
}

这不会在执行过程中抛出exeception,但当我试图从数据库中获取数据时,它说没有找到xy表。

要创建备份,我使用以下查询:

Query query = em.createNativeQuery("SCRIPT TO 'backup.sql'");

如本文所述。

我用Scanner解析了UploadedFile文件的InputStream,这破坏了SQL。

最新更新