반응형
- 기존에 아래와 같이 메모 데이터를 저장하는 테이블이 있다.
@Entity(tableName = "save_model")
data class Memo(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
var title: String,
var detail: String,
val dtCreated: Long,
var dtUpdated: Long,
var color: String
)
- 링크 데이터를 추가하기 위해 String 타입 필드를 추가하려고 한다.
@Entity(tableName = "save_model")
data class Memo(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
var title: String,
var detail: String,
val dtCreated: Long,
var dtUpdated: Long,
var color: String,
var link: String? = null
)
- 먼저 위와 같이 초기 값을 null로 하여 link 필드를 추가했다.
- 그리고 마이그레이션 오브젝트를 생성하는데, 여기서 기존 버전, 신규 버전의 값을 명확히 기입하는 것에 주의하자
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE save_model ADD COLUMN link TEXT")
}
}
- 그리고 ADD COLUMN SQL 문 정확하게 작성해 준다.
- 이어서 DB Builder 함수에 옵션으로 추가해 준다.
@Singleton
@Provides
fun provideSaveDatabase(
@ApplicationContext context: Context
): MemoDatabase =
Room.databaseBuilder(context, MemoDatabase::class.java, "memo.db").addMigrations(
MIGRATION_1_2
).build()
- 그리고 Database 객체 version도 신규 버전으로 업데이트해 준다.
@Database(entities = [Memo::class], version = 2)
abstract class MemoDatabase : RoomDatabase() {
abstract fun saveDataDao(): SaveDataDao
}
반응형