如何从 Room SQLite 数据库中检索数据?
How to retrieve data from Room SQLite database?
所以我按照 youtube 上的教程创建了一个房间数据库。我有两个专栏 day 和 likes,每个专栏都包含 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 中 class 我目前有 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 flow的解决方案,但我还没有弄明白。 YT 上的所有教程都使用 Recycler 视图和适配器,但我不会使用它们。
我对 sqlite 和 MVVM 很陌生。谢谢帮忙!!!
试试这个查询,你需要在参数中传递日期。
@Query("SELECT * FROM RECOVERY_TABLE WHERE day=:day ORDER BY day ASC ")
LiveData<List<Recovery>> getRecoveryWithDay(int day);
这将为您提供匹配日期的恢复列表,如果需要
,您可以将 return 类型从 LiveData<List<Recovery>>
更改为 List<Recovery>
如果您发现任何错误,请告诉我。
所以我按照 youtube 上的教程创建了一个房间数据库。我有两个专栏 day 和 likes,每个专栏都包含 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 中 class 我目前有 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 flow的解决方案,但我还没有弄明白。 YT 上的所有教程都使用 Recycler 视图和适配器,但我不会使用它们。 我对 sqlite 和 MVVM 很陌生。谢谢帮忙!!!
试试这个查询,你需要在参数中传递日期。
@Query("SELECT * FROM RECOVERY_TABLE WHERE day=:day ORDER BY day ASC ")
LiveData<List<Recovery>> getRecoveryWithDay(int day);
这将为您提供匹配日期的恢复列表,如果需要
,您可以将 return 类型从LiveData<List<Recovery>>
更改为 List<Recovery>
如果您发现任何错误,请告诉我。