2016-01-13 128 views
1

我在一个项目中使用基于文件的hsql数据库。 现在我们正在测试很多以确保前端正常工作。但由于我们的数据的性质,并没有删除整个数据集的功能,为了摆脱我的数据库中的测试数据,我必须经常重新启动,以便我可以重新开始一些测试。为了说清楚我不是在谈论JUnit测试,我们在每次JUnit测试开始后重新设置数据库。我在应用程序本身中讨论测试。顺便说一句,这是一个JSF应用程序,但这对我的问题来说不应该太重要。重新初始化HSQL数据库

我正在考虑在运行时重置数据库的操作。就像删除整个数据库并使用我们在服务器启动时提供的脚本重新初始化它。

我发现这个帖子:https://stackoverflow.com/a/9918473/1337295

不过遗憾的是不工作,在查询一些代币似乎是数据库未知。

我们配置我们的数据库是这样的:

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
    <property name="url" value="jdbc:hsqldb:file:testdb;shutdown=true"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
</bean> 

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="classpath:embeddedDB/embeddedDbStructure.sql"/> 
    <jdbc:script location="classpath:embeddedDB/embeddedDbData.sql"/> 
</jdbc:initialize-database> 

我们使用基于文件的数据库,这样我们就可以使用数据库管理器摆动的UI,这看起来是一个内存数据库工作。

那么,是否有可能在运行时重新初始化数据库?这样做的首选方式是什么?

在此先感谢。

回答

0

我要说到做到这一点,最好的方法是让Hibernate从它的实体每次你建立一个新的数据库使用

<property name="hbm2ddl.auto" value="create"/> 

如果需要使用DbUnit设置默认数据。

是否有一个原因,它是一个文件数据库,而不是在内存中,如果有很多重置正在进行?

+0

那么,正如我所说的,我们正在使用数据库管理器swing ui。我没有得到它与内存数据库的工作,基于文件的作品很好,我没有看到任何性能差异。它也只用于我们的开发环境,所以它并不重要。 但是你的建议对我的情况如何?就像我所说的,没有单元测试在这里,或者没有单元测试的问题。我想在运行时从我的应用程序重新启动数据库,所以我想它应该是一个程序化的解决方案。当我重新启动服务器时,数据得到恢复,我只是想避免这一步,因为我很懒 –

+0

好吧对不起,我专注于单元测试。我会说你只是使用sql脚本重新生成数据库,并直接从jdbc命令调用。这一点真的很重要你使用什么分贝。弹簧嵌入式数据库支持更多用于设置。 –