Android Jetpack

ROOM Migration

----___<<<<< 2022. 7. 22. 14:19

 

 기존에 DAO를 수정할 일이 생겨서 한번 수정을 해보겠습니다.

 

 현재 앱 화면은 이렇습니다.

 

 

 이 앱의 Entity를 기존에 있는 형태에서

 

@Entity(tableName = "text_table")
data class TextEntity (

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    var id : Int,

    @ColumnInfo(name = "text")
    var text : String


)

 

새롭게 Entity를 하나 더 만들어보겠습니다.

 

@Entity(tableName = "text_table2")
data class TextEntity2 (

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id2")
    var id2 : Int,

    @ColumnInfo(name = "text2")
    var text2 : String,


)

 

가장 쉬운 방법은 버전을 하나 올리고 

 

.fallbackToDestructiveMigration()

 

이 코드를 추가하는 것입니다.

 

 

 그런데 이렇게 할 경우 기존 데이터가 날라가는 현상이 발생됩니다.

 

 이럴 때는 어떻게 해야할까요?

 

 addMigration을 이용해주시면 됩니다.

 

@Database(
    entities = [TextEntity::class, TextEntity2::class, TextEntity3::class,TextEntity4::class],
    version = 27,
    exportSchema = false
)
abstract class TextDatabase : RoomDatabase() {

    abstract fun textDao() : TextDao

    companion object {

        @Volatile
        private var INSTANCE : TextDatabase? = null

        fun getDatabase(
            context : Context
        ) : TextDatabase {
            return INSTANCE ?: synchronized(this){
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    TextDatabase::class.java,
                    "text_database"
                )
//                    .fallbackToDestructiveMigration()
                    .addMigrations(MIGRATION_1_2)
                    .build()
                INSTANCE = instance
                instance
            }
        }

        val MIGRATION_1_2 = object : Migration(26, 27) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("CREATE TABLE `text_table3` (`id3` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `text3` TEXT NOT NULL)")
//                database.execSQL("DROP TABLE `text_table3`")
            }
        }
    }

}

'Android Jetpack' 카테고리의 다른 글

ROOM TypeConverter  (0) 2022.07.23
ROOM Embeded  (0) 2022.07.22
ROOM + FLOW CRUD - 4 (DELTE, UPDATE)  (0) 2022.07.17
ROOM + FLOW CRUD - 3  (0) 2022.07.12
ROOM + FLOW CRUD - 2  (0) 2022.07.11