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