我需要同步删除表中的所有数据,然后插入新数据。
根据文档@Query异步运行,因此以下方法尚未完成删除数据的操作,因此我们开始在下一行中插入数据,这会导致崩溃。
@Query("DELETE FROM myTable")
void deleteAll();
有什么办法可以同步删除它?我们应该将使用Query注释的方法的返回类型从void更改为int还是应该使用RoomDatabase.clearAllTables()方法。 不确定void clearAllTables()是否也同步运行。
答案 0 :(得分:0)
在2号会议室中,您可以运行异步查询,并以删除的项目作为结果。在那之后插入项目。
答案 1 :(得分:0)
如果您致电给dao
someDao.deleteAll()
someDao.insert(someObj)
您没有任何保证在开始插入命令之前deleteAll将完成。 为了使它在链中,只需为deleteAll()添加dao返回参数
@Query("DELETE FROM table")
fun deleteAll(): Int
现在,Room / SQLite将完成删除调用,以向您返回值。