使用Android中的新房间数据库,我有一个要求,即需要进行两个顺序操作:

removeRows(ids);

insertRows(ids);

如果我运行它,我看到(在检查数据库时)有一些行丢失 – 我认为它们在插入后被删除.即第一个操作与第二个操作并行运行.

如果我使用一个事务块,比如这个,那么一切都很好 – 第一个操作似乎在完成第二个之前完成:

roomDb.beginTransaction();

removeRows(ids);

roomDb.endTransaction();

insertRows(ids);

如果我在中间睡觉,那也没关系:

removeRows(ids);

Thread.sleep(500);

insertRows(ids);

Room似乎没有太多的文档,并且想知道我是否应该在完成顺序操作时使用上面的事务块,或者是否有更好的方法.

编辑:在@CommonsWare指出之后,@ Query是异步的,而@Insert和@Delete是同步的.鉴于此,我如何获得删除行异步的查询:

@Query("DELETE from table WHERE id IN(:ids)")

int removeRows(List ids);

根据构建输出我得到删除方法必须返回void或返回int(删除的行数),如果我尝试将返回类型包装在Flowable中.

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐