2012-08-24 105 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