房间更新(如果不存在则插入)行并返回计数更改的行

新手上路,请多包涵

我需要更新,如果不存在,则向 ROOM DB 插入行。

我做这个: productRepository.updateProducts(productsResponse.getProductItems());

和:

 @Override
public void updateProducts(final List<ProductItem> products) {
    new Thread(() -> {
        for (ProductItem item : products) {
            Product product = createProduct(item);
            productDao.insert(product);
        }
    }).start();
}

在 DAO 中:

 @Insert
void insert(Product products);

但我有方法

@Update
void update(Product product);

我有一些问题:

  1. 这两种方法都是无效的。插入后如何返回保存的产品或布尔标志或插入计数?

  2. 如果我尝试调用 update 并且我没有行,它会被插入吗?

  3. 如何更新(如果不是 - 插入)行并返回计数更新或插入的行?

原文由 ip696 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 765
1 个回答
@Query("SELECT * FROM pojo WHERE pojo.id = :id")
Maybe<POJO> checkPOJO(String id);

你可以像这样插入或更新:

 checkPOJO(id).toSingle().concatMapCompletable(pojo->update(pojo))
   .onErrorResumeNext(t -> t instanceof NoSuchElementException ?
   insert(...): Completable.error(t));

原文由 cinpeCan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题