개발일지

Android in A..Z - Room (데이터 미리 채우기) 본문

Android (안드로이드)/Room

Android in A..Z - Room (데이터 미리 채우기)

강태종 2021. 1. 17. 02:35

데이터 미리 채우기

상황에 따라 데이터베이스를 생성할 때 미리 데이터를 채워야 하는 경우나 데이터베이스를 Open할 때 데이터베이스를 조작해야하는 경우가 있다.

데이터베이스에 Callback을 제공하여 이러한 문제를 해결할 수 있다.


AppDatabase

데이터베이스를 생성할 때 addCallback을 사용하여 Callback을 추가할 수 있다.

@Database(entities = [Drawer::class, ToDo::class], version = 2, exportSchema = true)
abstract class AppDatabase : RoomDatabase() {
    companion object {
        private var instance: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {
            return instance ?: synchronized(this) {
                Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME)
                    .addCallback(object : Callback() {
                        override fun onCreate(db: SupportSQLiteDatabase) {
                            super.onCreate(db)
                            CoroutineScope(Dispatchers.IO).launch {
                                getInstance(context).drawer().insert(
                                    Drawer(name = "ToDo")
                                )
                            }
                        }
                        
                    })
                    .addMigrations(MIGRATION_1_2)
                    .build()
            }.also {
                instance = it
            }
        }

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

    abstract fun drawer(): DrawerDao
    abstract fun todo(): ToDoDao
}
  • onCreate : 데이터베이스가 최초로 생성될 때 실행된다.
  • onOpen : 데이터베이스를 열 때 실행된다.
  • onDestructiveMigration : Migration할 때 실행된다.

Git (예제코드)

github.com/KangTaeJong98/Example/tree/main/Android/Room

 

KangTaeJong98/Example

My Example Code. Contribute to KangTaeJong98/Example development by creating an account on GitHub.

github.com

 

Comments