개요
이전에 다루었던 Android ROOM 초기 자료 입력하기 글에서는 적은 양의 자료에만 적용할 수 있습니다. 자료가 많은 경우 텍스트 파일을 읽어 DB에 입력하는 방법을 생각해 볼 수 있습니다. 또 서버에 연결해서 자료를 받아와 입력하는 등 여러가지 방법이 있을 수 있습니다. 그러나 앱에서 처리하게 되면 모든 사용자들이 입력이 끝날 때 까지 기다려야 하는 문제가 있습니다.
DB에 입력되는 자료가 고정되어 있고 양이 많은 경우 개발 시 미리 입력해 놓은 DB를 적용하면 간편합니다. 이번글에서는 그 방법을 알아보도록 하겠습니다.
데이터 미리 채우기
SQLite DB에 자료를 입력하는 방법은 여러가지가 있습니다. 필자는 Android Studio 에 있는 Database Inspector 를 이용해서 다량의 자료를 DB에 입력했습니다. 미리 입력된 DB를 사용하는 방법은 개발자 문서에 잘 설명되어 있습니다.
DB 파일 준비
필자는 에뮬레이터에 저장되어 있는 DB 파일을 Device File Explorer 로 접근해서 로컬 PC에 저장했습니다. 그 다음 Android Studio 에서 assets 폴더를 생성하고 DB 파일을 복사했습니다.
코드추가
DB 초기 생성 부분에 다음과 같이 코드를 추가합니다.
fun getInstance(context: Context): yourDB? {
if (INSTANCE == null) {
synchronized(yourDB::class) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
yourDB::class.java, "your.db")
.addCallback(dbCallback)
.createFromAsset("your.db")
.fallbackToDestructiveMigration()
.build()
}
}
return INSTANCE
}
이렇게 하면 미리 자료를 입력해 놓은 DB 파일을 이용하게 됩니다. 앱에서 별도로 자료를 입력하는 과정을 수행할 필요가 없어지게 됩니다. 단, 정의된 Entity 와 미리 자료가 채워진 DB 파일의 구조가 같아야 합니다.
이번글에서는 미리 준비된 DB 파일을 ROOM 을 사용한 프로젝트에 적용하는 방법을 알아보았습니다.