我想在表中添加一個專案,但如果該專案已經存在于表中,我想修改一個列,這是我的道
@Dao
interface BasketDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(item: BasketItem)
@Delete
suspend fun delete(item: BasketItem)
@Query("SELECT * FROM basket_items")
fun loadBasketItems(): LiveData<List<BasketItem>>
}
我已經有一個 upsert 函式的沖突策略,如果專案存在就替換它,但我只想在專案存在時修改列的值,而不是替換整個專案,我能做什么
uj5u.com熱心網友回復:
您可以使用兩個資料庫呼叫來執行此操作(一個用于查詢現有專案,第二個用于插入/替換該專案)。
在道:
@Query("SELECT * FROM basket_items WHERE name = :name")
suspend fun getItemByName(name: String): BasketItem?
然后在你的資料層:
val newItemToSave = //
val existingItem = basketDao.getItemByName(newItemToSave.name)
if(existingItem == null)
basketDao.upsert(newItemToSave)
else
basketDao.upsert(existingItem.copy(quantity = existingItem.quantity 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346776.html
標籤:sql 科特林 android-room
上一篇:postgres字串中的重復引號
