我想通过DELETE FROM...WHERE...IN (...)
子句在Android Room中按其ID删除多行。下面是代码:
ItemDao
@Dao
interface ItemDao {
@Query("DELETE FROM Item WHERE id IN (:ids)")
fun deleteItemByIds(ids: String)
}
ItemViewModel
class ItemViewModel(application: Application) : AndroidViewModel(application) {
fun deleteByIds(ids: String) {
mScope.launch(Dispatchers.IO) {
mItemDao.deleteItemByIds(ids)
}
}
}
ItemActivity
fun onDelete(){
// these are not real IDs, just for demo
val itemIdList = arrayListOf<Long>(1, 2, 3)
val ids = itemIdList.toString().drop(1).dropLast(1) // ids = "1, 2, 3"
itemViewModel.deleteByIds(ids)
}
只有一个ID时,代码有效。但是,当有多个ID时,没有。那这里怎么了感谢您的帮助。
答案 0 :(得分:4)
在处理WHERE IN
子句时,您需要传递数组或列表。喜欢:
@Dao
interface ItemDao {
@Query("DELETE FROM Item WHERE id IN (:ids)")
fun deleteItemByIds(ids: Array<Long>)
}
答案 1 :(得分:1)
我知道这个问题要求删除带有 Id 列表的行,但是当我传递 10k+ Id 时,我的应用程序崩溃了。 所以我尝试传递对象本身,它对我有用。
@Dao
interface ItemDao {
@Delete
fun deleteUserByList(userList: Array<User>)
}
这样我可以删除超过 10k 行。
万一有人需要它。