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

Mid*_*lom 4 java sql connection h2 in-memory-database

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

h2Con = DriverManager.getConnection( 
                "jdbc:h2:mem:db1", "SA", "");
Run Code Online (Sandbox Code Playgroud)

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

IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con);
Run Code Online (Sandbox Code Playgroud)

以及我想稍后查询的导入

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

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

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

Kon*_*hov 12

添加DB_CLOSE_DELAY=-1URL

从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");
Run Code Online (Sandbox Code Playgroud)

......变成这个:

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");
Run Code Online (Sandbox Code Playgroud)