2010-06-08 26 views
3

是否有可能以某種方式設置HSQLDB,以便將帶有db信息的文件寫入內存而不是使用實際文件?我想使用hsqldb將一些數據結構與hibernate映射一起導出。但是,寫入臨時文件是不可能的,因此我需要生成內存中的文件並返回一個包含其內容的流作爲響應。HSQLDB和內存中的文件

將hsqldb設置爲使用nio似乎不是一個解決方案,因爲在寫入文件系統之前無法獲得這些文件。

我在想什麼是hsqldb協議處理程序,但我還沒有找到合適的解決方案。

只是爲了描述:黑客解決方案將通過hsqldb一個流或幾個流。然後在操作過程中將數據寫入這些流中。在寫入所有數據後,數據庫的用戶可以使用這些數據流通過網絡發回。

回答

6

是的,當然,我們一直使用它來進行集成測試。

用作網址:JDBC:HSQLDB:MEM:aname

看到here for more details

的DbUnit提供了一個方便的數據庫轉儲方法,他們包的一部分:

// database connection 
    Class driverClass = Class.forName("org.hsqldb.jdbcDriver"); 
    Connection jdbcConnection = DriverManager.getConnection(
      "jdbc:hsqldb:sample", "sa", ""); 
    IDatabaseConnection connection = new DatabaseConnection(jdbcConnection); 

    // full database export 
    IDataSet fullDataSet = connection.createDataSet(); 
    FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml")); 

看到DbUnit FAQ瞭解更多詳情。當然,還有一些例程可以恢復數據,因爲這實際上就是軟件包的一個重要部分:爲集成測試準備一個測試數據庫。通常我們用註釋來做這件事,但是你必須使用臨時API。

+0

當然,但如何獲得hsqldb執行結束後的數據? – paweloque 2010-06-08 23:40:35

+0

或換句話說:在hsqldb返回後,是否有可能獲得內存中的表示並將其序列化爲流? – paweloque 2010-06-08 23:42:06

+0

@lewap我更新了我的答案。我非常認真地閱讀這個問題的apoplogies。使用類似uberjar的工具,我猜測所有測試支持的開銷可以通過僅複製轉儲所需的類來最小化。 – 2010-06-09 06:42:32