如何在 ROOM 中将实体插入到我的数据库中?

问题描述

我正在第一次实现 ROOM,我的 UI 控制器中有一个运行对象

public void onStopButtonClick(View v){
    Run run = new Run(totaldistance,elapsedMillis,speedVal);
    viewmodel.insert(run);
}

它通过我的 viewmodel 传递,然后是我的存储库,然后进入我的数据库类:

private static RoomDatabase.Callback createCallback = new RoomDatabase.Callback() {
    @Override
    public void onCreate(@NonNull SupportsqliteDatabase db) {
        super.onCreate(db);

        Log.d("g53mdp","dboncreate");
        databaseWriteExecutor.execute(() -> {

            RunDao runDao = INSTANCE.runDao();
            runDao.deleteall();

            Run run = new Run(50,50,50);
            runDao.insert(run);

        });
    }
};

在这里我迷路了......我为每个值放置了 50 作为占位符,因为我对它应该如何获取我从 repo 传递的运行实体感到困惑 这是我的回购:

public class MyRepository {
    private RunDao runDao;
    private LiveData<List<Run>> allRuns;

    MyRepository(Application application) {
        MyRoomDatabase db = MyRoomDatabase.getDatabase(application);

        runDao = db.runDao();

        allRuns = runDao.getRunById();
    }

    LiveData<List<Run>> getAllRuns() {
        return allRuns;
    }


    void insert(Run run) {
        MyRoomDatabase.databaseWriteExecutor.execute(() -> {
            runDao.insert(run);
        });
    }
}

这是我的道:

@Dao
public interface RunDao {

    @Insert(onConflict = OnConflictStrategy.IGnorE)
    void insert(Run run);

    @Query("DELETE FROM run_table")
    void deleteall();

    @Query("SELECT * FROM run_table ORDER BY id ASC")
    LiveData<List<Run>> getRunById();

    @Query("SELECT * FROM run_table ORDER BY distance ASC")
    LiveData<List<Run>> getRunBydistance();

    @Query("SELECT * FROM run_table ORDER BY time ASC")
    LiveData<List<Run>> getRunByTime();

    @Query("SELECT * FROM run_table ORDER BY speed ASC")
    LiveData<List<Run>> getRunBySpeed();


}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)