Создайте базу данных SQLite inmemory от bytearray

84
5

Мне нужно обработать данные из базы данных SQLite с помощью некоторого кода Java. Проблема в том, что база данных извлекается из внешней службы и, следовательно, она доступна только как InputStream.


Мне бы очень хотелось избежать сохранения db в файловой системе перед началом обработки данных, но я не вижу способа сделать это.


В настоящее время я использую SqlJet, так как он предоставляет возможность создания базы данных в памяти. Однако, похоже, нет способа превратить массив InputStream/byte в базу данных.


Ничего не заставило меня использовать SqlJet, его можно легко заменить любым другим инструментом, если он предоставляет необходимую функциональность.

спросил(а) 2021-01-12T16:29:53+03:00 1 неделя, 3 дня назад
1
Решение
59

Это не может быть сделано как таковое. Возможно, 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;

ответил(а) 2021-01-12T16:29:53+03:00 1 неделя, 3 дня назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема