2011-11-07 50 views
3

我想在我的DAO單元測試中爲Web應用程序使用hsql。 Web應用程序是針對mysql編寫的,並在同一個mysql數據庫中使用三種不同的模式。某些模式與其他模式中的數據具有FK關係。如果我要進行單元測試,我必須能夠針對可以容納多個模式的數據庫執行操作。HSQL單元測試 - 如何創建多個內存模式?

我知道HSQL支持多個模式,但我不知道如何配置hsql以爲多個模式設置內存數據庫。我讀過我可以在server.properties文件中定義多個模式,但該文件需要位於Java類被調用的位置 - junit.jar位置?如果是這樣,那麼在我的Java Maven應用程序中很難支持。我如何能:

  1. 運行內存中的hsql數據庫以啓動三個數據庫?
  2. 我在哪裏可以將server.properties文件放入我的Maven應用程序中?
  3. 我可以指出hsql在junit jar的位置以外的地方使用server.properties文件(對我來說這是一個showstopper)嗎?
  4. 是否有可能通過一個被騙出的jdbc url爲內存數據庫配置多個模式?

我希望我可以解開對方的模式,但這是不可能在這個時候。

感謝您的幫助!

回答

3

HSQLDB支持同一個數據庫中的多個模式。外鍵可以引用來自不同模式的表。下面從http://hsqldb.org

  1. 到現有的最新HSQLDB 2.2.6快照運行測試之前,對每個方案執行CREATE SCHEMA schemaname
  2. 無所謂在哪裏,您可以在運行時在命令行參數中指定絕對路徑。請參閱服務器上的HSQLD指南和JavaDoc。
  3. 是的。
  4. 不可以。您使用SQL語句來創建模式。

請注意,您有兩種運行HSQLDB的選項,一種是作爲服務器,另一種作爲嵌入式數據庫。在服務器的情況下,它必須在測試運行之前啓動。在這兩種情況下,都需要連接到數據庫並在測試之前創建模式。

+0

啊! 'create schema'(不創建數據庫)!非常好,我已經插入並現在可以創建一個多模式內存數據庫。謝謝你的幫助。 –

1

可以通過設置數據庫名稱來創建不同的數據庫。默認情況下,它將db名稱創建爲testdb,但如果我們想要創建多個db,請明確設置名稱。

new EmbeddedDatabaseBuilder() 
       .setType(EmbeddedDatabaseType.HSQL).setName("DB_NAME") 
       .addScript("DDL.SQL") 
       .addScript("DML.SQL") 
       .build(); 

如果您運行下面的線多發的時候,你可以看到數據庫:

DatabaseManagerSwing.main(new String[] { "--url", "jdbc:hsqldb:mem:" + dbnaes, "--user", "sa", "--password", "" }); 
相關問題