我需要使用一些Java代码处理来自SQLite数据库的数据。问题是数据库是从外部服务检索的,因此它仅作为InputStream
提供。
我真的想在开始处理数据之前避免将db保存到文件系统,但是我没有看到这样做的方法。
我目前正在使用SqlJet,因为它提供了创建内存数据库的选项。但是,似乎没有办法将InputStream
/ byte数组转换为数据库。
没有任何东西强迫我使用SqlJet,如果它提供了所需的功能,它可以很容易地被任何其他工具取代。
答案 0 :(得分: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;