How to pre-populate Room database at first run?

Mar*_*222 1 sql android android-room

I am creating an android app in java that uses room SQLite to store data. The app have two tables:

  • CoursesTable
  • StudentsTable

I want to add default values for course_name entity so when the user open the app find the courses.

For example :

Math - Sport - Art - Music

@Entity
public class CoursesTable {
   @PrimaryKey(autoGenerate = true)
   int course_id;
   String course_name;
}
Run Code Online (Sandbox Code Playgroud)

the*_*e64 5

To insert data on first run / after db creation, you can use RoomDatabase.Callback.

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.Callback的onCreate和onOpen方法,并将其添加到RoomDatabase.Builder中,如下所示。

yourDatabase = Room.databaseBuilder(context, YourDatabase.class, "your db")
    .addCallback(rdc)
    .build();

RoomDatabase.Callback rdc = new RoomDatabase.Callback() {
    public void onCreate (SupportSQLiteDatabase db) {
        // ADD YOUR "Math - Sport - Art - Music" here
    }
    public void onOpen (SupportSQLiteDatabase db) {
        // do something every time database is open
    }
};
Run Code Online (Sandbox Code Playgroud)

一个完整的例子可以发现这里并详细介绍有关回调信息在这里

参考