更新有关会议室迁移的行

时间:2019-04-04 16:21:30

标签: android database-migration android-room

是否可以编写迁移来更新某个表的所有先前数据?
 我正在为房间数据开发加密,如果能在迁移后加密所有行,那将是很好的事情

1 个答案:

答案 0 :(得分:1)

好吧,在定义迁移时,您可以访问SupportSQLiteDatabase,通过它您可以执行SQL查询。您可以使用SQL查询通过update语句更新以前的数据。

您可以使用query方法访问旧数据,该方法返回一个Cursor。 光标可用于获取信息,例如用户的ID和密码。 最终的代码可能看起来像这样。

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;")
        }
    }
}

别忘了更新数据库版本。