Миграция с SQLCipher V1 на Room DB V2 при обновлении приложения:

Я создаю два приложения с одинаковым именем пакета:

  1. В первом приложении я использую SQLCipher, используя «Pass_Phrase» (версия_1 БД) для операций CRUD, используяJava.
  2. Во втором приложении я просто хотел перейти с SQLCipher на Room (БД версии_2), а также прочитать данные из SQLCipher и поместить их в БД Room, используяKotlin.

Я завершил первое приложение и застрял на этапе миграции во втором приложении. Нужна ваша помощь. Большое спасибо!

1 ответ

Для 2. вы можете использовать миграцию, для этого база данных Room передается ей как SupportSQLiteDatabase.

Таким образом, вы могли бы либо

  • откройте исходную (зашифрованную) базу данных, а затем получите к ней доступ, как вы (сделали), возможно, выгружая данные в курсоры для загрузки в версию Room, или
  • ATTACHисходной базы данных в базу данных Room (черезSupportSQLiteDatabaseхexecSQLметод ), а затем скопируйте данные с помощью SQL и, наконец, DETACHисходная база данных.

Когда база данных подключена, ее компоненты, такие как таблицы, доступны (вы должны использовать заданное имя схемы, чтобы различать компоненты с одинаковыми именами). См . ПРИЛОЖЕНИЕ

  • Обратите внимание, что ATTACHSQL будет соответствовать строкамATTACH 'the_path_to_the_database' AS 'the_schema_name_to_use' KEY 'the_key'
    • the_path_to_the_databaseпуть к базе данных, которая будет прикреплена
    • the_schema_name_to_useможет быть произвольным значением с некоторыми ограничениями (не основным или временным).
    • the_keyявляющийся секретным ключом

Ответ здесь включает пример, в котором используется первый метод (в соответствии с классом MainDatabase, хотя и на Java (что не требует больших усилий для преобразования в Kotlin) )

Другие вопросы по тегам