Миграция Android-комнаты: обновление имени атрибута путем создания новой таблицы - PullRequest
0 голосов
/ 07 октября 2018

Issue

В моем проекте у меня есть таблица комнат с именем ' content ' с атрибутом Double ' archivedCount '.В последней версии приложения атрибут archivedCount атрибут переименован в dismissCount , все еще в виде типа Double.

Уровень API AndroidВерсия SQL

28 / 3.19

Модель исходного содержимого

@Entity(tableName = "content")
data class Content(@PrimaryKey var id: String, var archiveCount: Double) : Parcelable {...}

Новая модель содержимого

@Entity(tableName = "content")
data class Content(@PrimaryKey var id: String, var dismissCount: Double) : Parcelable {...}

Ошибка времени выполнения

java.lang.IllegalStateException: Migration didn't properly handle content(app.coinverse.content.models.Content).

Я проверил в таблицах Expect и Found распечатки журналов, и они кажутся идентичными.

Попытка решения

Я попытался использовать сложную схему изменить , как указано в Google Developer Advocate, безуспешно, чтобы изменить имя одного атрибута / столбца.Вот основная версия того, что я пытался.

val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
    // Create the new table
    database.execSQL("CREATE TABLE content_new (id TEXT, dismissCount REAL, PRIMARY KEY(id))")
    // Copy the data
    database.execSQL("INSERT INTO content_new (id, dismissCount) SELECT id, archiveCount FROM content")
    // Remove the old table
    database.execSQL("DROP TABLE content")
    // Change the table name to the correct one
    database.execSQL("ALTER TABLE content_new RENAME TO content")
}

}

1 Ответ

0 голосов
/ 07 октября 2018

Не вижу ничего плохого в вашей реализации, я бы посоветовал вам использовать другой класс @Entity, который не называется Content (), и повторите попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...