有没有一种通过EclipseLink实体管理器创建数据库转储/备份的方法?我想向我的java (下拉向导)项目添加一个功能,允许管理员下载当前的数据库(也许还可以导入一个新的数据库)。我正在使用H2数据库。
谢谢
发布于 2016-07-21 10:23:00
这对你来说很容易,但是我不认为EntityManager能做到这一点
(这不是100 %的事实-但我想不出怎么做,所以我向你们展示了你们也可以在EM中使用的直截了当的选择)
所需条件:
您需要拥有H2DB,并且需要绑定数据源(或者打开来自实体管理器的连接)。然后要运行的命令是:
SCRIPT TO '/path/to/my/file'
例如,我就是这样实现它的:
@Inject
private DataSource ds;
@GET
@Path("dump")
public Response dump() {
try (Connection c = ds.getConnection(); Statement s = c.createStatement()) {
s.execute("SCRIPT TO '/home/artur/tmp/test/test.sql'");
} catch (SQLException e) {
e.printStackTrace();
}
return Response.ok().build();
}
所以,有几点:
您不需要直接访问数据源。一个快速的google透露道,eclipselink会让你像这样访问你的连接:
entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();
或者,这也可以工作(并且不使用任何连接/jdbc属性):
emp.get().createNativeQuery("SCRIPT TO '/home/artur/tmp/test/test.sql'").getResultList();
我不知道你到底想做什么,但你可以:
我不认为你能让h2db把垃圾堆还给你。不过,我可能错了。
编辑:我错了
entityManager方法将返回包含整个SQL的结果列表。因此,您可以在代码和文件中(您可以删除您的文件)。
试一试,看看调试器会吐出什么。就像我说的,我没有使用EclipseLink,所以行为可能略有不同。
玩得开心,我希望这能解决你的问题:)
阿图尔
https://stackoverflow.com/questions/38490159
复制相似问题