views:

667

answers:

3

I am looking for an in-memory relational (SQL) database for Java (something like HSQLDB), whose whole state I can serialise.

wholeDatabase.serialize(outputStream);
newCopyOftheDatabase.loadFrom(inputStream);

Or maybe the DB only uses a byte[] that I give it on initialization:

byte[] memory = new byte[10 *1024*1024];
new InMemoryDatabase(memory);

The database will not be too huge, low tens of MB, but I cannot write files, so I need to stream everything off the machine before I shut the VM down (and periodically for backup).

I could use plain (and easily serializable) Java data structures like arrays or maps instead of a DB, but I want to be able to use SQL.

A: 

Have you thought of patching HSQLDB?

http://hsqldb.svn.sourceforge.net

kdgregory
+4  A: 

HSQLDB has an in-memory option:

Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

You just need to dump and restore the contents. To dump the structure, you may use the SCRIPT SQL command. Than you can dump every table by select. There may be a better API used by the manager and/or server internally, but you need to have a look at the (open) sources for this, i think.

Arne Burmeister
A: 

Looks like JavaDB will support this soon:

http://blogs.sun.com/kah/entry/derby_10_5_preview_in

Jack Leow
That blog post doesn't exactly demonstrate piping the database contents to a single stream.
Jeremy Huiskamp