我目前正在以内存模式测试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() }
但是在内存中,如果连接关闭,我会丢失数据吗?那么在我结束程序之前,它应该保持打开状态吗?
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");