一尘不染

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

sql

我目前正在以内存模式测试H2 DB。我建立了一个连接

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

我想使用dbunit进行一些导入并设置dbUnits db连接

IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con);

还有我想稍后查询的导入

所以我的问题是,在内存模式下,什么时候可以关闭连接?通常我会做这样的事情

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

但是在内存中,如果连接关闭,我会丢失数据吗?那么在我结束程序之前,它应该保持打开状态吗?


阅读 117

收藏
2021-05-23

共1个答案

一尘不染

添加DB_CLOSE_DELAY=-1网址

从H2文档中

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

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

所以这:

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");
2021-05-23