首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用EclipseLink获取数据库备份/转储

使用EclipseLink获取数据库备份/转储
EN

Stack Overflow用户
提问于 2016-07-20 20:21:31
回答 1查看 505关注 0票数 1

有没有一种通过EclipseLink实体管理器创建数据库转储/备份的方法?我想向我的java (下拉向导)项目添加一个功能,允许管理员下载当前的数据库(也许还可以导入一个新的数据库)。我正在使用H2数据库。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 10:23:00

这对你来说很容易,但是我不认为EntityManager能做到这一点

(这不是100 %的事实-但我想不出怎么做,所以我向你们展示了你们也可以在EM中使用的直截了当的选择)

所需条件:

您需要拥有H2DB,并且需要绑定数据源(或者打开来自实体管理器的连接)。然后要运行的命令是:

代码语言:javascript
运行
复制
SCRIPT TO '/path/to/my/file'

例如,我就是这样实现它的:

代码语言:javascript
运行
复制
    @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会让你像这样访问你的连接:

代码语言:javascript
运行
复制
entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();

或者,这也可以工作(并且不使用任何连接/jdbc属性):

代码语言:javascript
运行
复制
emp.get().createNativeQuery("SCRIPT TO '/home/artur/tmp/test/test.sql'").getResultList();

我不知道你到底想做什么,但你可以:

  • 将文件名传递到资源中,以便DBA知道在何处创建转储?
  • 写入临时位置,读取转储并返回流(供下载)

我不认为你能让h2db把垃圾堆还给你。不过,我可能错了。

编辑:我错了

entityManager方法将返回包含整个SQL的结果列表。因此,您可以在代码和文件中(您可以删除您的文件)。

试一试,看看调试器会吐出什么。就像我说的,我没有使用EclipseLink,所以行为可能略有不同。

玩得开心,我希望这能解决你的问题:)

阿图尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38490159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档