티스토리 뷰
Room 사용 중 table 의 schema 가 변경되거나 하면 version을 올려주어 db 내용 이전 작업을 해줘야 합니다
예제에서는 기존 User table에 nickname이 추가된 경우를 가정합니다
1. 배경
- 기존 테이블
CREATE TABLE USER(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INT NOT NULL
)
- 변경하고자 하는 테이블
CREATE TABLE USER(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INT NOT NULL,
nickname TEXT
)
2. 변경작업
우선 Migration 객체를 만들고, migrate method을 override하여 Table을 옮겨주는 작업을 합니다
Migration 의 첫번째 인자는 기존 버전, 두번째 인자는 새로운 버전입니다
private val MIGRATION_1_2 = object: Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("""
CREATE TABLE IF NOT EXISTS NEW_USER(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL,
nickname TEXT,
)
""".trimIndent())
database.execSQL("""
INSERT INTO NEW_USER(id, name, age)
SELECT id, name, age FROM USER
""".trimIndent())
database.execSQL("DROP TABLE USER")
database.execSQL("ALTER TABLE NEW_USER RENAME TO USER")
}
}
그리고 Room databaseBuilder에 위 migration 객체를 넘겨줍니다
INSTANCE = Room.databaseBuilder(context, AppDatabase::class.java, name)
.createFromAsset(path)
.addMigrations(MIGRATION_1_2)
.build()
'안드로이드' 카테고리의 다른 글
(Android) TabLayout, ViewPager2 연동 (0) | 2022.07.18 |
---|---|
(Android) 음성인식 (SpeechRecognize) (0) | 2022.07.06 |
(Android) file(uri) 존재 여부 확인 (0) | 2022.06.23 |
(Android) 국가별 맞춤 SimpleDateFormat 보여주기 (0) | 2022.06.23 |
(Android) 동영상 재생 Intent (0) | 2022.06.22 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday