【问题标题】:Run H2 in server mode and store data to file在服务器模式下运行 H2 并将数据存储到文件
【发布时间】:2014-11-12 18:43:00
【问题描述】:

这非常简单,很好记录了如何在服务器模式下运行 H2。只需代码:

Server.createTcpServer().start();

很容易。但我无法找到答案:

  • 如何为创建的数据库指定一个不同于“test”的名称,因为这是默认名称。
  • 如何保存数据。看起来,服务器以这种方式启动了一个内存数据库。但我正在寻找的是能够永久保存数据的东西。

有什么想法吗?

【问题讨论】:

  • 也许this 在 SO 上的帖子至少有部分帮助...

标签: h2


【解决方案1】:

Connecting to a Database using JDBC中所述,可以在数据库URL中指定数据库文件名,例如

jdbc:h2:tcp://localhost/~/src/java/MyDatabase;IFEXISTS=TRUE

数据将存储在文件MyDatabase,h2.db中。

有关指定;IFEXISTS=TRUE 的效果,请参见Opening a Database Only if it Already Exists。将 URL 与这些嵌入模式 examples 进行比较。

附录:你会在哪里提供这个 URL

服务器启动后,您可以通过将 URL 传递给首选客户端(如 here 建议的那样)或以编程方式通过 java.sql.Connection(如 here 所示)以编程方式连接到正在运行的数据库。

【讨论】:

  • 我读了很多遍。但是你会在哪里提供这个 URL。看看 API 我只找到这个属性支持的选项有:-tcpPort、-tcpSSL、-tcpPassword、-tcpAllowOthers、-tcpDaemon、-trace、-ifExists、-baseDir、-key .有关详细信息,请参见主要方法。此外,我可以看到'-properties ' 是可能的,但我找不到任何属性描述。并且从 API Server 中只有一个方法 getURL,而不是 setURL。我不知道该怎么办。
  • @AndreasRiedel:最简单的方法是浏览http://localhost:8082,建议here;以上。
【解决方案2】:

又过了一天并切换到德比,我找到了解决这个问题的方法。我不知道为什么 H2 文档没有处理这个问题,但是没关系。
首先。对我来说,连接 url 和 DB-Files 的物理位置是不同的东西。而且我不喜欢这个文件的东西,因为我想在运行时查看数据库。

那么,这是什么

private Server startDb() {
    Server retVal = null;

    try {
        final String userDir = System.getProperty("user.dir");
        // System.setProperty("h2.baseDir", userDir + "/data/jumpstart");

        retVal = Server.createTcpServer("-baseDir", userDir + "/data/jumpstart");
        retVal.start();

        Connection conn = null;
        try {
            Class.forName("org.h2.Driver");
            conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/jumpstart", "sa", "sa");
        } finally {
            if (conn != null)
                conn.close();
        }
    } catch (final Exception ex) {

    }

    return retVal;
}

正如您在此处看到的,db 的文件将存储在目录 /data/jumpstart 中。

JDBC 连接的 URL 隐藏了这个细节。它只处理名称为 jumpstart 的数据库。

原来如此。

HTH
安德烈亚斯

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2022-06-22
    • 2016-03-04
    • 2020-01-28
    • 2010-12-02
    相关资源
    最近更新 更多