在会议室中插入和更新项目无法正常工作

时间:2019-11-29 04:05:24

标签: android kotlin android-room

我正在使用Kotlin和Room进行一些基本操作。所有操作正常,但是updateAll并没有更新数据库。道像如下:

@Dao
interface ItemListDao {

    @Insert
    fun insertAll(itemLists: List<ItemList>)

    @Insert//(onConflict = OnConflictStrategy.IGNORE)
    fun insert(itemLists: ItemList)

    @Delete
    fun delete(itemList: ItemList)

    @Update(onConflict = OnConflictStrategy.REPLACE)
    fun update(itemList: ItemList)

    @Transaction
    fun upset(itemList: ItemList) {
        try {
            insert(itemList)
        } catch (exception: SQLiteConstraintException) {
            update(itemList)
        }
    }

    @Transaction
    fun updateAll(itemLists: List< ItemList>) {
        itemLists.forEach {
            upset(it)
        }
    }

}

@Entity
data class ItemList constructor(
    @PrimaryKey val listId: String,
    val displayName: String
}

updateAll函数用于检查itemList列表中的元素是否存在,然后更新该元素(如果不存在,则进行插入)。

我还认为我应该查询一下如果没有插入itemList是否存在,如果有则更新?

不确定哪一个更好。

编辑: 我用

@Update(onConflict = OnConflictStrategy.REPLACE)

使用udpate方法,然后在updateAll中,我仅调用update,但实际上无法通过单元测试。

编辑 我的正确方法

@Transaction
    fun updateAll(itemLists: List< ItemList>) {
     itemLists.forEach {
        val itemList = findItemList(it.listId)
        if (itemList != null) {
            update(it)
        } else {
            insert(it)
        }
       update(it)
    }
   }

有帮助吗?非常感谢!

0 个答案:

没有答案