728x90
RoomDatabase가 처음 생성될때 초기 데이터 값을 넣는 방법이다.
Room은 Callback을 제공하는데, 이때 Callback내에서 db가 처음 생성될때 불리는 `onCreate`를 사용하는 것이다.
(여기서 onCreate는 모든 테이블이 생성된 뒤에 불린다고 나와있다.)
구현 설명
1. Entity
public class SomeEntity{
private String name;
private Integer age;
}
- SomeEntity가 있다고 가정하겠다.
2. DAO
@Dao
public interface SomeEntityDao {
@Insert
public void insert(SomeEntityDao);
}
- Entity가 있으니, DAO도 있다고 가정해보자.
3. Execute part
public abstract class AppDB extends RoomDatabase {
public abstract SomeEntityDao someEntityDao();
private static AppDB INSTANCE;
private static synchronized AppDB getInstance(Context ctx){
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(ctx, AppDB.class, "AppDB")
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull @NotNull SupportSQLiteDatabase db) {
super.onCreate(db);
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
db.execSQL("INSERT INTO SomeEntity VALUES('atsky', '25')");
}
});
}
})
.build();
}
return INSTANCE;
}
}
- onCreate는 Room의 모든 테이블이 생성된 이후, 동작하게 됨으로 초기값이 들어가게 된다.
참고사이트
https://medium.com/android-news/pre-populate-room-database-6920f9acc870
틀린부분이 있다면 바로 수정할 수 있도록 하겠습니다.
읽어주셔서 감사합니다.
728x90
'Android' 카테고리의 다른 글
Android :: Notification을 사용하여 간단한 알림을 만들기(예제포함) (0) | 2021.05.17 |
---|---|
Android :: Toolbar 사용 방법과 메뉴 커스터마이징(three dots image color, 메뉴의 위치, 예제포함) (0) | 2021.05.11 |