【问题标题】:Embedding the Java h2 database programmatically以编程方式嵌入 Java h2 数据库
【发布时间】:2010-09-14 08:30:51
【问题描述】:

目前我们使用HSQLDB 作为嵌入式数据库,但随着数据量的增长,我们会搜索内存占用更少的数据库。

Derby / JavaDB 目前不是一个选项,因为它在系统属性中全局存储属性。于是我们想到了h2

当我们使用 HSQLDB 时,我们创建了一个服务器对象,设置参数并启动它。这被描述为here(并在类 org.hsqldb.test.TestBase 中作为示例给出)。

问题是:这也可以与 h2 数据库类似吗?你有任何代码示例吗?扫描h2页面,没找到例子。

【问题讨论】:

    标签: java database embedding h2


    【解决方案1】:

    是的,您可以在嵌入式模式下运行 H2。您只需使用 JDBC 驱动程序并连接到这样的嵌入式 url(他们的示例):

    此数据库可用于嵌入式 模式,或服务器模式。使用它 嵌入式模式,您需要:

    * Add h2.jar to the classpath
    * Use the JDBC driver class: org.h2.Driver
    * The database URL jdbc:h2:~/test opens the database 'test' in your user home directory
    

    使用 JDBC 连接嵌入式 H2 数据库的示例(改编自 http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcDataSource.html):

    import org.h2.jdbcx.JdbcDataSource;
    // ...
    JdbcDataSource ds = new JdbcDataSource();
    ds.setURL("jdbc:h2:˜/test");
    ds.setUser("sa");
    ds.setPassword("sa");
    Connection conn = ds.getConnection();
    

    如果您希望在纯内存/嵌入式模式下使用 H2,您也可以这样做。有关更多信息,请参阅此链接:

    您只需要在普通 JDBC 代码中使用一个特殊的 URL,例如“jdbc:h2:mem:db1”。

    【讨论】:

    • 我需要正确设置“属性”,也就是说:我必须 - 至少 - 设置数据库所在的目录。这就是我们不能使用 Derby/JavaDB 的原因,因为它使用系统属性,如问题中所述。
    • 在端口 8082 上运行,默认为 h2 也是没有选项。
    • 我不明白你在说什么。这里没有使用系统属性。您指定存储文件的位置。由您的应用决定在哪里执行此操作。如果需要,您可以使用 java.io.tmpdir。它不在嵌入式模式的端口上运行。
    • 我正在修改这个备份 - 亚历克斯的回答非常准确。 OP 是否不清楚如何使用驱动程序类和 URL 建立 JDBC 连接?让我们澄清一下,也许 Alex 愿意提供一些使用这些参数的实际代码。
    • 我添加了 JDBC 连接代码。不过只是普通的 JDBC 用法。 @Georgi,您是否正在寻找纯 in-memory only 数据库?也许这里对“嵌入式”的含义存在混淆。对我来说,这意味着“进程中的引擎”而不是“内存中的数据”。
    【解决方案2】:

    从下载中,我看到文件tutorial.html有这个

    import org.h2.tools.Server;
    ...
    // start the TCP Server
    Server server = Server.createTcpServer(args).start();
    ...
    // stop the TCP Server
    server.stop();
    

    【讨论】:

      【解决方案3】:

      如果出于某种原因您需要在服务器模式下嵌入 H2 数据库,您可以使用 API 手动完成 在http://www.h2database.com/javadoc/org/h2/tools/Server.html - 或通过 将 ;AUTO_SERVER=TRUE 附加到数据库 URL。

      【讨论】:

        猜你喜欢
        • 2017-03-05
        • 2015-05-24
        • 1970-01-01
        • 2011-05-22
        • 2023-03-19
        • 2021-07-03
        • 2016-01-22
        • 2020-06-14
        • 2017-01-11
        相关资源
        最近更新 更多