在服务器模式下运行H2并将数据存储到文件

时间:2014-09-18 12:19:06

标签: h2

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

Server.createTcpServer().start();

很简单。但我无法找到答案:

  • 如何为创建的数据库提供除“test”之外的其他名称,因为这是默认名称。
  • 如何保存数据。看起来,这样服务器启动内存数据库。但我正在寻找的是永久保存数据的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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。将网址与这些嵌入模式examples进行比较。

附录:您将在何处提供此网址

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

答案 1 :(得分:2)

过了一天又转到德比,我找到了解决这个问题的方法。我不知道为什么这不是由H2文件处理的,但是确定 首先。对我来说,连接URL和DB-Files的物理位置是不同的东西。而且我不喜欢这个文件的东西,因为我想在运行中看看db。

所以,这是什么

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;
}

正如您在此处所见,数据库的文件将存储在directoy / data / jumpstart中。

JDBC connect的URL隐藏了这个细节。它只对名称为jumpstart的DB进行寻址。

是的。

HTH
  安德烈亚斯