我有以下问题:
我有一个预装了大量测试数据的数据库。每次测试运行后,我想丢弃测试过程所做的更改。我已经尝试使用嵌入式 H2 DB 来做到这一点。我会用原始文件覆盖数据库文件,问题就会解决。但是又出现了一个问题:H2不作为服务器运行不支持多线程。
之后我查看了 HSQLDB。如果我理解正确,如果它被用作普通文件数据库(不在内存中),它仍会将数据库的内容加载到内存中,并在一段时间后将更改保存到磁盘。
是否有可能只将文件 DB 读入内存,在那里使用它并在最后丢弃任何更改?这将是完美的。使用回滚的解决方案也很棒。
谢谢, 丹尼尔
最佳答案
对于H2数据库:
从脚本加载数据库,append
;INIT=runscript from '~/create.sql'
to the database URL .您还可以从类路径中的资源加载脚本;为此,将~/create.sql
替换为classpath:/com/acme/init/create.sql
.如果您对更改不感兴趣,可以将它与内存数据库 (jdbc:h2:mem:test;...
) 结合使用。在多线程模式下使用H2数据库,append
;MULTI_THREADED=1
to the database URL .这适用于所有模式(内存中、嵌入式、客户端/服务器)。
关于testing - 每次测试运行后重置数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655263/