为了账号安全,请及时绑定邮箱和手机立即绑定

如何预填充 Room 数据库?

如何预填充 Room 数据库?

qq_笑_17 2021-06-01 17:59:57
这是我第一次尝试使用 Room 数据库,我想用 20 个用户对象预填充数据库。但是我使用的代码每次运行时都会向现有列表中添加 20 个用户。我如何防止它这样做?@Database(entities = {User.class}, version = 1)public abstract class AppDatabase extends RoomDatabase {private static AppDatabase INSTANCE;public abstract DataExchange dataExchange();public static AppDatabase getAppDatabase(final Context context){    if (INSTANCE == null){        INSTANCE = Room.databaseBuilder(context,                AppDatabase.class,                "User_Database")                .addCallback(new Callback() {                    @Override                    public void onCreate(@NonNull final SupportSQLiteDatabase db) {                        super.onCreate(db);                        Executors.newSingleThreadScheduledExecutor().execute(new Runnable() {                            @Override                            public void run() {                                getAppDatabase(context).dataExchange().insert(User.populate());                            }                        });                    }                })                .build();    }    return INSTANCE;}public static void destroyInstance(){    INSTANCE = null;}这是用户类:@Entity(tableName = "user_table")public class User{public User(String name){    setName(name);}@PrimaryKey(autoGenerate = true)private int uid;@ColumnInfo(name = "Username")private String name;public String getName() {    return name;}public void setUid(int uid) {    this.uid = uid;}public void setName(String name) {    this.name = name;}public static User[] populate(){    User[] ar = new User[20];    for(int i=0; i<20;i++){        ar[i] = new User("USER "+(i+1));    }    return ar;}}另外,我从中获取代码的地方在 run() 中有一个 getInstance(context) 而不是 getAppDatabase(context)。我更改了它,因为在我不知道的 5 个库中找到了 getInstance。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 260 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信