Updated
您可以通过 3 种方式执行此操作:重要的是检查此迁移详细信息 https://developer.android.com/training/data-storage/room/prepopulate
1-从导出的资产模式填充数据库
Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
.createFromAsset("database/myapp.db")
.build();
2-从文件填充数据库
Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
.createFromFile(new File("mypath"))
.build();
3-您可以在创建数据库后运行脚本,或者在每次打开数据库时运行脚本RoomDatabase.Callback
,此类在最新版本的 Room 库中可用。
你需要实施onCreate
and onOpen
的方法RoomDatabase.Callback
并将其添加到RoomDatabase.Builder
如下所示。
yourDatabase = Room.databaseBuilder(context, YourDatabase.class, "your db")
.addCallback(rdc)
.build();
RoomDatabase.Callback rdc = new RoomDatabase.Callback() {
public void onCreate (SupportSQLiteDatabase db) {
// do something after database has been created
}
public void onOpen (SupportSQLiteDatabase db) {
// do something every time database is open
}
};
参考 https://medium.com/@srinuraop/database-create-and-open-callbacks-in-room-7ca98c3286ab
您可以在 RoomDatabase.Callback 方法中使用 Room DAO 本身来填充数据库。完整示例请参见分页和房间示例 http://www.zoftino.com/pagination-in-android-using-paging-library
RoomDatabase.Callback dbCallback = new RoomDatabase.Callback() {
public void onCreate(SupportSQLiteDatabase db) {
Executors.newSingleThreadScheduledExecutor().execute(new Runnable() {
@Override
public void run() {
getYourDB(ctx).yourDAO().insertData(yourDataList);
}
});
}
};