2014-11-21 96 views
2

我正在测试内存模式下的H2数据库。 我成立了由在内存数据库h2中保持连接打开多久?

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

我想一些进口用DbUnit的连接和设置dbUnits DB连接

IDataBaseConnection dBUnitConnection = new DatabaseConnection(h2con); 

和我想查询后

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

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

但在内存中,如果连接被关闭,我失去的数据?那么它应该保持开放直到我结束我的计划?

回答

7

从H2 documentation

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

因此,您可以配置H2以保持内存中的数据库完好无损,因为您的JVM的生命周期,然后您可以根据需要连接和断开连接。

0

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

String url =“jdbc:h2:〜/ test; DB_CLOSE_ON_EXIT = FALSE”;