2012-08-24 46 views
3

我需要使用一些Java代码来处理来自SQLite数据库的数据。问题在于数据库是从外部服务中检索的,因此它仅作为InputStream提供。从bytearray创建SQLite inmemory数据库

我真的想避免在开始处理数据之前将数据库保存到文件系统,但我没有看到这样做的方法。

我目前使用SqlJet,因为它提供了创建内存数据库的选项。但是,似乎没有办法将InputStream/byte数组转换为数据库。

没有什么要求我使用SqlJet,如果它提供了所需的功能,它可以很容易地被任何其他工具所取代。

+1

我不认为SQLite的API支持打开某种内存块 - > http://sqlite.org/c3ref/open.html - 也许如果你在内存中创建了一些文件系统,但是我建议你把流保存到一个文件中,然后使用它。 – zapl

+0

也许使用像“jimfs”这样的虚拟文件系统? – Joel

回答

1

它不能这样做。也许Java支持某种机制来创建某种形式的虚拟文件,这种虚拟文件在本地(作为当前进程)呈现为某种物理文件。

我可以想出一种解决限制的方法,但在您的上下文中这可能不可行或不可接受。您可以更改的服务来回报数据库的转储和装载,在接收器的内存数据库:

这里是产生垃圾的方式:

# sqlite3 
SQLite version 3.7.11 2012-03-20 11:35:50 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table foo (i text); 
sqlite> insert into foo values ('a'); 
sqlite> insert into foo values ('b'); 
sqlite> .dump 
PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE foo (i text); 
INSERT INTO foo VALUES('a'); 
INSERT INTO foo VALUES('b'); 
COMMIT; 
+0

好主意,它回答了这个问题。谢谢! – Andrew