2016-01-13 162 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命令調用。這一點真的很重要你使用什麼分貝。彈簧嵌入式數據庫支持更多用於設置。 –