我正在开发一个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。