如何预填充 Room 数据库?

这是我第一次尝试使用 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。



qq_笑_17
浏览 261回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java