gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:29:23 24 4
gpt4 key购买 nike

我需要更新,如果不存在,则向 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. 这两种方法都是无效的。插入后如何返回保存的产品或 bool 标志或插入计数?

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

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

最佳答案

正如 @Danail Alexiev 所说,@Insert 可以返回一个 long@Update 可以返回一个 int

但是您使用更新的目的是什么?如果您只想将整个对象替换为新对象,则只需指定 OnConflictStrategy

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Product products);

结果将是: 不存在的项目将被添加,已经存在的项目将被新的项目替换。

如果您需要只更新一个参数(例如数量),您可以这样做

  @Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Product products);

@Query("SELECT * from item WHERE id= :id")
List<Product> getItemById(int id);

@Query("UPDATE item SET quantity = quantity + 1 WHERE id = :id")
void updateQuantity(int id)

void insertOrUpdate(Product item) {
List<Product> itemsFromDB = getItemById(item.getId())
if (itemsFromDB.isEmpty())
insert(item)
else
updateQuantity(item.getId())
}
}

结果将是: 尝试在数据库中查找项目,如果找到则更新属性,如果不插入新项目。所以你只需要从你的 DAO 调用一个方法 insertOrUpdate

关于android - 房间更新(如果不存在则插入)行并返回计数更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com