我正在使用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)
}
}
有帮助吗?非常感谢!