Ответ 1
SQLiteOpenHelper() создаст базу данных в памяти, если name
- null
. Обратите внимание, что он будет создан при вызове getWritableDatabase()
.
Затем вы должны вставить свои данные.
Я читал, просматривал, много искал в этом, я многократно перекрещивался с переполнением stackoverflow и мне удалось как можно меньше сузить проблему.
Единственное, что я не понимаю, - это то, как полностью использовать базу данных SQLite в памяти.
Вот моя ситуация. У меня есть зашифрованная база данных SQLite, которую я расшифровываю во время загрузки моего приложения (эта часть работает точно). Мой класс, который взаимодействует с базой данных, работает с простой базой данных. Поэтому, чтобы сделать это коротко, все безупречно с простой БД, которая загружается из внутренней памяти телефона, но я не уверен, как и где хранить дешифрованную БД в памяти, чтобы она интерпретировалась как нормальная БД.
Я думаю, я должен положить null
вместо имени в super(context, null, null, 3);
и использовать :memory:
вместо пути в SQLiteDatabase.openDatabase()
, но я до сих пор не понимаю полностью. В нем говорится, что он не может найти таблицу android_metadata
, но я уверен, что база данных такая же, как и должно быть.
Надеюсь, я понял это:)
SQLiteOpenHelper() создаст базу данных в памяти, если name
- null
. Обратите внимание, что он будет создан при вызове getWritableDatabase()
.
Затем вы должны вставить свои данные.
Вы (или инфраструктура) создаете базу данных, используя ОДИН:
SQLiteDatabase.create()
SQLiteDatabase.openDatabase()
SQLiteDatabase.openOrCreateDatabase()
Первый вариант - это единственный способ создать базу данных только для памяти, другие две - открыть или создать файл базы данных.
Следовательно, если вы используете SQLiteOpenHelper()
и вы проходите name
как null
, инфраструктура вызывает SQLiteDatabase.create(null)
, поэтому вы получите базу данных, которая живет только в памяти (она умирает при вызове close()
). Нет необходимости также вызывать один из других прямых методов. Вместо этого вызовите getReadableDatabase()
или getWritableDatabase()
из вашего помощника.
Вы должны быть осторожны, используя inmemory, поскольку ваши данные будут потеряны после того, как соединение db будет потеряно. Убедитесь, что ваш экземпляр db не был закрыт