内存数据库H2保持连接开放的时间有多久?

8
我目前正在测试内存模式下的H2数据库。 我通过以下方式建立了连接:
h2Con = DriverManager.getConnection( 
                "jdbc:h2:mem:db1", "SA", "");

我想使用dbunit进行一些导入,并设置dbUnit的数据库连接。
IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con);

“我想查询的导入数据”,“那么我的问题是,在内存模式下,何时可以关闭连接?通常我会像这样做。”
try{
   //some sql query
}catch{
   //error handling
}finally{
    if(connection!=null)
        connection.close()
}

但是,如果连接关闭了,我会失去数据吗?所以应该保持连接开放直到我结束程序吗?
2个回答

18

在URL中添加DB_CLOSE_DELAY=-1

根据H2 文档

默认情况下,关闭最后一个连接到数据库的连接将关闭数据库。对于内存数据库,这意味着内容会丢失。 要保持数据库打开状态,请在数据库URL中添加;DB_CLOSE_DELAY=-1。 要在虚拟机存活期间保留内存数据库的内容,请使用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");

0
在某些情况下,数据库不应该在这种情况下关闭,例如因为虚拟机关闭时仍在使用数据库(例如将关闭过程存储在数据库中)。对于这些情况,可以在数据库URL中禁用自动关闭数据库。第一个连接(打开数据库的连接)需要在数据库URL中设置选项(无法在之后更改设置)。禁用退出时关闭数据库的数据库URL为: String url = "jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接