java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.
Room을 사용할 때 schema의 변경이 있으면 업데이트 해줘야하는데 안해줘서 그렇다.
이 경우 database의 클래스 버전을 높여서 Room이 데이터베이스를 새 버전으로 이행(migration)하게 해야한다.
생성 전 코드
@Database(entities = [Sound::class], version = 1)
abstract class SoundRoomDatabase : RoomDatabase() {
abstract fun soundRoomDao(): SoundRoomDao
}
생성 후 코드
@Database(entities = [Sound::class], version = 2)
abstract class SoundRoomDatabase : RoomDatabase() {
abstract fun soundRoomDao(): SoundRoomDao
}
val migration_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"ALTER TABLE Sound Add COLUMN isChecked INTEGER NOT NULL DEFAULT 0"
)
}
}
migration_1_2
를 선언한다.migration_1_2
는 database의 변화를 적용한다. Migration(이전버전, 이후버전)
을 적어주고 migrate를 상속받아와서 변화가 생긴 database의 컬럼이나 관련 스키마를 적어주면 된다.수정 전 코드
class SoundRepository private constructor(context: Context) {
private val roomDatabase: SoundRoomDatabase = Room.databaseBuilder(
context.applicationContext,
SoundRoomDatabase::class.java,
ROOM_DATABASE_NAME
).build()
}
수정 후 코드
class SoundRepository private constructor(context: Context) {
private val roomDatabase: SoundRoomDatabase = Room.databaseBuilder(
context.applicationContext,
SoundRoomDatabase::class.java,
ROOM_DATABASE_NAME
).addMigrations(migration_1_2).build()
}
This may be a tip for managing database migrations or avoiding similar issues in the space waves, I'd love to hear!