Java 内存数据库h2连接保持打开多久?

Java 内存数据库h2连接保持打开多久?,java,sql,connection,h2,in-memory-database,Java,Sql,Connection,H2,In Memory Database,我目前正在测试内存模式下的H2 DB。 我建立了一个连接 h2Con = DriverManager.getConnection( "jdbc:h2:mem:db1", "SA", ""); 我想使用dbunit导入一些内容,并设置dbUnits数据库连接 IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con); 以及我稍后要查询的导入 所以我的问题是,在内存模式下,什么时候可

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

h2Con = DriverManager.getConnection( 
                "jdbc:h2:mem:db1", "SA", "");
我想使用dbunit导入一些内容,并设置dbUnits数据库连接

IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con);
以及我稍后要查询的导入

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

try{
   //some sql query
}catch{
   //error handling
}finally{
    if(connection!=null)
        connection.close()
}
但是在内存中,如果连接关闭,我会丢失数据吗?那么它应该一直打开直到我结束我的程序吗?

在URL中添加
DB\u CLOSE\u 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");

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

String url=“jdbc:h2:~/test;DB\u CLOSE\u ON\u EXIT=FALSE”