SQLite保持内存数据库打开直到jvm退出

时间:2019-05-29 15:08:16

标签: java sqlite

我想保留一个内存中的sqlite数据库,但是没有连接。

我正在对Web应用程序进行单元测试,因此在@BeforeAll方法中,我进行了一些初始化,然后在各种测试方法中,进行了一些DDL操作。

当然,当最后一个打开的连接关闭时,内存db中的sqlite被拆除,破坏了我的测试。

我做到了保持内存数据库中的H2处于打开状态,直到JVM存活为止,

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

但是我找不到sqlite的替代品。 我尝试过

jdbc:sqlite::memory:&cache=shared

但似乎不起作用。

有可能吗?

1 个答案:

答案 0 :(得分:0)

由于单元测试应该是相互独立的,因此我建议不要进行这种方式。根据您使用的基础框架,您可能希望使用注释来驱动初始化和拆卸SQL的执行。例如,对于Spring,您可以使用以下代码:

https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-testing-annotation-sql

如果您不能使用注释,或者真的决心沿着这条道路前进(上下文就是一切:您可能完全有充分的理由),一种可能性是在您的@BeforeAll方法中打开一个附加连接,该方法然后您可以使用@AfterAll方法手动关闭。由于这是由您的代码单独管理的附加连接,因此sqlite会被欺骗,直到执行@AfterAll方法后才执行清理。

如果希望它处于JVM级别,则可以使用类的静态初始化程序...