android - 开始时在 Room 中添加数据的最佳方法是什么?

标签 android android-room

我想在应用程序第一次启动时在我的数据库中添加一些行(大约 180 行)。我找到了一些使用 Executors.newSingleThreadExecutor() 的教程,例如 https://android.jlelse.eu/pre-populate-room-database-6920f9acc870 .但是还有其他方法可以预填充数据库吗?

AppDatabase.class

@Database(entities = {Country.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase INSTANCE;

    public abstract CountryDao countryDao();

    public synchronized static AppDatabase getInstance(Context context) {
        if (INSTANCE == null)
            INSTANCE = buildDatabase(context);
        return INSTANCE;
    }

    private static AppDatabase buildDatabase(final Context context) {
        return Room.databaseBuilder(context, AppDatabase.class, "countries").allowMainThreadQueries().addCallback(new Callback() {
            @Override
            public void onCreate(@NonNull SupportSQLiteDatabase db) {
                super.onCreate(db);
                Executors.newSingleThreadExecutor().execute(new Runnable() {
                    @Override
                    public void run() {
                        getInstance(context).countryDao().insertAll(Country.populateData());
                    }
                });
            }
        }).build();
    }
}

最佳答案

没有。

如果您要创建一个新数据库,只有一种方法可以预填充数据库,那就是注册 this回调和覆盖 onCreate(SupportSQLiteDatabase db) 方法。

关于android - 开始时在 Room 中添加数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50074480/

相关文章:

android - 如何打开 jetpack DataStore 文件 (.preferences_pb)

android - 通过 Android 中的耳机插孔输入音频?

android - Android Room 的可选查询参数

android - Coroutine 调用放在 Repository 和 ViewModel 哪个更好?

android - 与 Room 和 LiveData 的多对多关系

java - 单击复选框时显示图像数组列表

android - 复制一个android studio项目

android - 如何将一个布局组件的高度设置为与另一个组件的高度相同?

android - RoomDB - 您可以连接来自不同数据库的表吗

Android Room - 如何在每次应用程序运行时重置自动生成的表主键