[Android] 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.

park_sujeong·2022년 12월 16일
0

Errors

목록 보기
5/5

에러


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)하게 해야한다.

1. Database 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"
        )
    }

}
  • database의 version을 바꾸고 migration을 하기위해 변수 migration_1_2를 선언한다.
  • 변수 migration_1_2는 database의 변화를 적용한다. Migration(이전버전, 이후버전)을 적어주고 migrate를 상속받아와서 변화가 생긴 database의 컬럼이나 관련 스키마를 적어주면 된다.
  • 나는 Sound라는 데이터에 isChecked라는 Boolean값의 컬럼을 추가해주었다.



2. Database 인스턴스화할 때 Migration 객체 제공

수정 전 코드

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




profile
Android Developer

1개의 댓글

This may be a tip for managing database migrations or avoiding similar issues in the space waves, I'd love to hear!

답글 달기