是否可以以某种方式设置HSQLDB,以便将包含db信息的文件写入内存而不是使用实际文件?我想使用hsqldb将一些数据结构与hibernate映射一起导出。但是,不可能编写临时文件,因此我需要在内存中生成文件并返回一个包含其内容的流作为响应。
将hsqldb设置为使用nio似乎不是一个解决方案,因为在将这些文件写入文件系统之前无法获取这些文件。
我在想的是hsqldb的协议处理程序,但我还没有找到合适的解决方案。
换句话说,一个黑客解决方案是将hsqldb传递给一个流或几个流。然后它将在其操作期间将数据写入这些流。在写完所有数据之后,db的用户可以使用这些流通过网络将其发回。
答案 0 :(得分:6)
是的,当然,我们一直使用它进行集成测试。
用作url:jdbc:hsqldb:mem:aname
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。当然还有恢复数据的例程,因为这实际上是包的目的:为集成测试准备一个测试数据库。通常我们使用注释来执行此操作,但您必须使用tha API。