繁体   English   中英

在内存数据库中h2保持连接打开多长时间?

[英]in memory database h2 how long keep connection open?

我正在测试内存模式下的H2 DB。 我建立了一个连接

h2Con = DriverManager.getConnection( 
                "jdbc:h2:mem:db1", "SA", "");

我想用dbunit进行一些导入并设置dbUnits数据库连接

IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con);

以及我想稍后查询的导入

所以我的问题是,在内存模式下,何时可以关闭连接? Normaly我做这样的事情

try{
   //some sql query
}catch{
   //error handling
}finally{
    if(connection!=null)
        connection.close()
}

但是在内存中,如果连接关闭,我会丢失数据? 所以它应该保持开放,直到我结束我的程序?

在URL中添加DB_CLOSE_DELAY=-1

从H2 文档

默认情况下,关闭与数据库的最后一个连接会关闭数据库。 对于内存数据库,这意味着内容丢失。 要使数据库保持打开状态,请将DB_CLOSE_DELAY = -1添加到数据库URL。 要在虚拟机处于活动状态时保留内存数据库的内容,请使用jdbc:h2:mem:test; DB_CLOSE_DELAY = -1。

因此,您可以配置H2以保持内存数据库的完整性,因为JVM的生命周期,然后您可以根据需要连接和断开连接。

所以这:

JdbcDataSource ds = new org.h2.jdbcx.JdbcDataSource();
ds.setURL("jdbc:h2:mem:example_db_");
ds.setUser("scott");
ds.setPassword("tiger");

......变成这个:

JdbcDataSource ds = new org.h2.jdbcx.JdbcDataSource();
ds.setURL("jdbc:h2:mem:example_db_;DB_CLOSE_DELAY=-1"); // ⬅ Add ‘delay’ element to URL.
ds.setUser("scott");
ds.setPassword("tiger");

在某些情况下,在这种情况下不应关闭数据库,例如,因为数据库仍在虚拟机关闭时使用(例如,将关闭进程存储在数据库中)。 对于这些情况,可以在数据库URL中禁用数据库的自动关闭。 第一个连接(打开数据库的连接)需要在数据库URL中设置选项(之后无法更改设置)。 在退出时禁用数据库关闭的数据库URL是:

String url =“jdbc:h2:〜/ test; DB_CLOSE_ON_EXIT = FALSE”;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM