모바일 앱(안드로이드)

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. 전체 마이그레이션 과정 요약

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



반응형