如何从Room SQLite数据库检索数据?

时间:2020-07-18 16:55:35

标签: android mvvm android-sqlite android-room

因此,我已经按照youtube上的教程创建了一个会议室数据库。我有两天的专栏,每个专栏都喜欢int。目前,我已经用三行数据手动填充了数据库。

以下是用于手动填充数据库的代码:

@Database(entities = Recovery.class, version = 1, exportSchema = false)
public abstract class RecoveryDatabase extends RoomDatabase {

private static RecoveryDatabase INSTANCE;
public abstract RecoveryDao recoveryDao();

// Singleton
public static RecoveryDatabase getInstance(final Context context) {
    if (INSTANCE == null) {
        synchronized (RecoveryDatabase.class) {
            if (INSTANCE == null) {
                INSTANCE = Room.databaseBuilder(context.getApplicationContext(), RecoveryDatabase.class, "recovery_database").fallbackToDestructiveMigration().addCallback(roomCallback).build();
            }
        }
    }
    return INSTANCE;
}

private static RecoveryDatabase.Callback roomCallback = new RoomDatabase.Callback() {
    @Override
    public void onCreate(@NonNull SupportSQLiteDatabase db) {
        super.onCreate(db);
        new PopulateDbAsyncTask(INSTANCE).execute();
    }
};

private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
    private RecoveryDao recoveryDao;

    private PopulateDbAsyncTask(RecoveryDatabase db) {
        recoveryDao = db.recoveryDao();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        // First input is the day and the second is the num of likes for that day
        recoveryDao.insert(new Recovery(6,1));
        recoveryDao.insert(new Recovery(7,2));
        recoveryDao.insert(new Recovery(8,3));
        return null;
    }
}

}

在我的Dao类中,我目前有Insert,Update,deleteAll和getAll ...方法。 这是道:

@Dao
public interface RecoveryDao {

@Insert
void insert(Recovery recovery);

@Update
void update(Recovery recovery);


@Query("DELETE FROM recovery_table")
void deleteAllRecovery();

// Sends data from ascending day to the call. (1,2,3,4 ....)
@Query("SELECT * FROM RECOVERY_TABLE ORDER BY day ASC")
LiveData<List<Recovery>> getAllRecovery();

}

现在,我想根据日期从Room数据库中检索数据。因此,我希望第6天的喜欢次数为1。我想检索数据并将其存储到mainActivity中的int变量中。

所以我的最终目标是数据库中有很多数据行并将其检索并将其存储到ArrayList中,但是我必须首先弄清楚如何首先检索数据。

我已经尝试了许多来自stackover流的解决方案,但是我还没有弄清楚。 YT上的所有教程都使用Recycler视图和适配器,但我不会使用它们。 我对sqlite和MVVM非常陌生。谢谢您的帮助!!!

1 个答案:

答案 0 :(得分:2)

尝试此查询,您需要在参数中传递日期。

@Query("SELECT * FROM RECOVERY_TABLE WHERE day=:day ORDER BY day ASC ")
LiveData<List<Recovery>> getRecoveryWithDay(int day);

这将为您提供具有匹配日期的恢复列表,您可以根据需要将返回类型从List<Recovery>更改为LiveData<List<Recovery>>

如果您遇到任何错误,请告诉我。