Обновление строк при миграции комнаты - PullRequest
3 голосов
/ 04 апреля 2019

Можно ли написать миграцию для обновления всех предыдущих данных какой-либо таблицы?
Я разрабатываю шифрование для данных моей комнаты и было бы неплохо, если бы я мог зашифровать все строки после миграции

1 Ответ

1 голос
/ 04 апреля 2019

Что ж, при определении миграции у вас есть доступ к SupportSQLiteDatabase , через который вы можете выполнить SQL-запрос.Вы можете использовать запросы SQL для обновления предыдущих данных с помощью оператора update.

Вы можете получить доступ к старым данным с помощью метода query , который возвращает Cursor .Курсор может быть использован для получения информации, такой как идентификатор и пароль пользователя.Окончательный код может выглядеть примерно так:

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        val cursor = database.query("SELECT * FROM user")
        while(cursor.moveToNext()) {
            val id = cursor.getColumnIndexOrThrow("_id")
            val password = cursor.getString("password")
            //-- Hash your password --//
            database.execSQL("UPDATE user
                              SET password = hashedPassword
                              WHERE _id = id;")
        }
    }
}

Не забудьте обновить версию базы данных.

...