Использование in-memory sqlite android


Я читал, просматривал, много искал в этом, я многократно перекрещивался с переполнением stackoverflow и мне удалось как можно меньше сузить проблему.

Единственное, что я не понимаю, - это то, как полностью использовать базу данных SQLite в памяти.

Вот моя ситуация. У меня есть зашифрованная база данных SQLite, которую я расшифровываю во время загрузки моего приложения (эта часть работает точно). Мой класс, который взаимодействует с базой данных, работает с простой базой данных. Поэтому, чтобы сделать это коротко, все безупречно с простой БД, которая загружается из внутренней памяти телефона, но я не уверен, как и где хранить дешифрованную БД в памяти, чтобы она интерпретировалась как нормальная БД.

Я думаю, я должен положить null вместо имени в super(context, null, null, 3); и использовать :memory: вместо пути в SQLiteDatabase.openDatabase(), но я до сих пор не понимаю полностью. В нем говорится, что он не может найти таблицу android_metadata, но я уверен, что база данных такая же, как и должно быть.

Надеюсь, я понял это:)

Ответы

Ответ 1

SQLiteOpenHelper() создаст базу данных в памяти, если name - null. Обратите внимание, что он будет создан при вызове getWritableDatabase().

Затем вы должны вставить свои данные.

Ответ 2

Вы (или инфраструктура) создаете базу данных, используя ОДИН:

  • SQLiteDatabase.create()
  • SQLiteDatabase.openDatabase()
  • SQLiteDatabase.openOrCreateDatabase()

Первый вариант - это единственный способ создать базу данных только для памяти, другие две - открыть или создать файл базы данных.

Следовательно, если вы используете SQLiteOpenHelper() и вы проходите name как null, инфраструктура вызывает SQLiteDatabase.create(null), поэтому вы получите базу данных, которая живет только в памяти (она умирает при вызове close()). Нет необходимости также вызывать один из других прямых методов. Вместо этого вызовите getReadableDatabase() или getWritableDatabase() из вашего помощника.

Ответ 3

Вы должны быть осторожны, используя inmemory, поскольку ваши данные будут потеряны после того, как соединение db будет потеряно. Убедитесь, что ваш экземпляр db не был закрыт

https://www.sqlite.org/inmemorydb.html