当前位置: 首页 > 面试题库 >

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

洪光霁
2023-03-14
问题内容

我目前正在以内存模式测试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()
}

但是在内存中,如果连接关闭,我会丢失数据吗?那么在我结束程序之前,它应该保持打开状态吗?


问题答案:

从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");


 类似资料:
  • 我遇到了这个问题:对于Vaadin7,我已经配置了我的持久性。xml,下面是代码 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“version=“2.0” 当我创建一个新的JPA容器并将其绑定到一个表时,我会在MSSQL活动监视器上看到我的新连接,但如果会话超时或注销,我仍然会在SQL上看到连接。 如果我在应用程序中重新登录,

  • 问题内容: 在许多使用MongoDB的入门示例中,您将看到类似以下的代码: 如果MongoDB与任何其他数据库系统一样,并且操作通常在时间上很昂贵。 所以,我的问题是这样的:只需执行一次,将返回值分配给某个全局模块即可,模块中具有各种功能就可以进行各种与数据库相关的工作(将文档插入集合,更新文档等)。 ),然后由应用程序的其他部分调用它们(从而重新使用该值),然后,在应用程序完成后,才执行。 换句

  • 我在一个Spring Boot应用程序中使用H2数据库。但无法在http://localhost:8080/console的浏览器中打开它。我的pom.xml如下所示: Spring引导配置: Springboot配置文件

  • 我想在整个camel路由中保持数据库连接。我已经在路由上定义了名为“stageDataSource”的数据源。如何在处理器“MyDBStageProcessor”中使用相同的数据源,或者更确切地说,使用相同的数据库连接? 我在MyDBStageProcencer中创建了一个新的连接并关闭了它。但是,它在Postgres中最大限度地耗尽了我的连接。因此,我想在整个路由中使用单个连接。 我可以从Exc

  • 问题内容: 我有一个bukkit插件(minecraft),需要连接到数据库。 数据库连接应该一直保持打开状态,还是在需要时打开和关闭? 问题答案: 数据库连接仅在需要时才打开,并在完成所有必要的工作后关闭。代码示例: 在Java 7之前: try { con = … //retrieve the database connection //do your work… } catch (SQLEx

  • 我有一个bukkit插件(minecraft),需要连接到数据库。 数据库连接应该一直保持打开状态,还是在需要时打开和关闭?