Создайте базу данных SQLite inmemory от bytearray
Мне нужно обработать данные из базы данных SQLite с помощью некоторого кода Java. Проблема в том, что база данных извлекается из внешней службы и, следовательно, она доступна только как InputStream
.
Мне бы очень хотелось избежать сохранения db в файловой системе перед началом обработки данных, но я не вижу способа сделать это.
В настоящее время я использую SqlJet, так как он предоставляет возможность создания базы данных в памяти. Однако, похоже, нет способа превратить массив InputStream
/byte в базу данных.
Ничего не заставило меня использовать SqlJet, его можно легко заменить любым другим инструментом, если он предоставляет необходимую функциональность.
Это не может быть сделано как таковое. Возможно, 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;