Sqlite 保持内存数据库打开直到 jvm 退出
Posted
技术标签:
【中文标题】Sqlite 保持内存数据库打开直到 jvm 退出【英文标题】:Sqlite keep in memory database open until jvm exit 【发布时间】:2019-05-29 15:08:15 【问题描述】:我想在内存中保留一个 sqlite 数据库,但没有附加连接。
我正在对 Web 应用程序进行单元测试,因此在 @BeforeAll 方法中我进行了一些初始化,然后在各种测试方法中进行了一些 DDL 操作。
当然,当最后一个打开的连接关闭时,内存数据库中的sqlite被拆除,破坏了我的测试。
我实现了将内存数据库中的 H2 保持打开直到 JVM 存在,这样做
jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
但我找不到 sqlite 的替代品。 我试过了
jdbc:sqlite::memory:&cache=shared
但似乎不起作用。
有可能吗?
【问题讨论】:
你说的是 android 还是其他 Java 框架? 一个 sqlite 内存数据库在最后一个连接关闭时被释放。你无法改变这种行为。 我在 grizzly 服务器上使用球衣(没有 android) 【参考方案1】:由于单元测试应该是相互独立的,我建议不要以这种方式进行。根据您使用的底层框架,您可能希望使用注释来驱动初始化和拆卸 SQL 的执行。例如,对于 Spring,您可以使用以下内容:
https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-testing-annotation-sql
如果您不能使用注释或真的决心沿着这条路前进(上下文就是一切:您可能完全有充分的理由),一种可能性是在您的 @BeforeAll
方法中打开一个额外的连接,您会然后在 @AfterAll
方法中手动关闭。由于这将是一个由您的代码单独管理的附加连接,因此 sqlite 将被诱骗在 @AfterAll
方法执行之前不执行其清理。
如果您希望它处于 JVM 级别,您可以使用类的静态初始化器...
【讨论】:
以上是关于Sqlite 保持内存数据库打开直到 jvm 退出的主要内容,如果未能解决你的问题,请参考以下文章