2010-06-08 51 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