Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

Room Database Migration: 칼럼 추가와 데이터 타입 변경

Billcorea 2024. 10. 19. 15:28

Room Database Migration: 칼럼 추가와 데이터 타입 변경

database migration

 

안녕하세요! 이번 포스트에서는 Room 데이터베이스에서 마이그레이션을 통해 칼럼을 추가하고 데이터 타입을 변경하는 방법에 대해 알아보겠습니다. 이 포스트를 통해 데이터베이스 마이그레이션을 원활하게 처리하는 방법을 배우실 수 있습니다.

1. 기본적인 칼럼 추가

새로운 칼럼을 추가할 때는 마이그레이션 클래스를 작성하여 ALTER TABLE SQL 명령어를 사용합니다. 예를 들어, new_column이라는 INTEGER 칼럼을 example_table에 추가하는 방법은 다음과 같습니다:

kotlin
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE example_table ADD COLUMN new_column INTEGER NOT NULL DEFAULT 0")
    }
}

2. Boolean 칼럼 추가

Room에서는 Boolean 타입을 직접 지원하지 않기 때문에, INTEGER 타입을 사용하여 0과 1로 표현합니다. deviceInfo 테이블에 deviceSelected라는 Boolean 칼럼을 추가하는 예제는 다음과 같습니다:

kotlin
val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE deviceInfo ADD COLUMN deviceSelected INTEGER NOT NULL DEFAULT 0")
    }
}

3. 데이터베이스 빌더에 마이그레이션 추가

데이터베이스 빌더에 마이그레이션을 추가하여 데이터베이스 인스턴스를 생성합니다:

kotlin
val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "database-name")
    .addMigrations(MIGRATION_1_2)
    .build()

4. 데이터베이스 버전 업데이트

@Database 어노테이션에서 데이터베이스 버전을 업데이트합니다:

kotlin
@Database(entities = [DeviceInfo::class], version = 2)
abstract class AppDatabase : RoomDatabase() {
    abstract fun deviceInfoDao(): DeviceInfoDao
}

5. 전체 마이그레이션 과정 요약

위 단계를 통해 데이터베이스 마이그레이션을 원활하게 처리할 수 있습니다. 새로운 칼럼을 추가하거나 데이터 타입을 변경할 때는 항상 주의 깊게 작업해야 하며, 마이그레이션 로직을 정확하게 작성하는 것이 중요합니다.



반응형