如何在首次运行时填充Android Room数据库表? [英] How to populate Android Room database table on first run?

查看:1124
本文介绍了如何在首次运行时填充Android Room数据库表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

SQLiteOpenHelper中,有一种onCreate(SQLiteDatabase ...)方法,我曾经用一些初始数据填充数据库表.

In SQLiteOpenHelper there is a onCreate(SQLiteDatabase ...) method which i used to populate database tables with some initial data.

首先有没有一种方法可以将一些数据插入到Room数据库表中 应用运行?

Is there a way to insert some data into Room database table on first app run?

推荐答案

已更新

您可以通过3种方式执行此操作:重要,请查看此信息以获取迁移详细信息

You can do this in 3 ways: important check this for migration details

1-从导出的资产架构中填充数据库

1- Populate your database from exported asset schema

Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
    .createFromAsset("database/myapp.db")
    .build();

2-从文件填充数据库

2- Populate your database from file

Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
    .createFromFile(new File("mypath"))
    .build();

3-您可以在创建数据库后运行脚本,也可以在每次使用RoomDatabase.Callback打开数据库时运行脚本,此类在最新版本的Room库中可用.

3- You can run scripts after database is created or run every time database is opened using RoomDatabase.Callback, this class is available in the latest version of the Room library.

您需要实现RoomDatabase.CallbackonCreateonOpen方法并将其添加到RoomDatabase.Builder中,如下所示.

You need to implement onCreate and onOpen method of RoomDatabase.Callback and add it to RoomDatabase.Builder as shown below.

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
    }
};

参考

您可以在RoomDatabase.Callback方法中使用Room DAO本身来填充数据库.有关完整示例,请参见分页和聊天室"示例

You can use Room DAO itself in the RoomDatabase.Callback methods to fill the database. For complete examples see Pagination and Room example

   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);
                }
            });
        }
    };

这篇关于如何在首次运行时填充Android Room数据库表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆