기존에 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 |