房间删除​​多行 WHERE IN 子句不起作用

Twi*_*aby 9 sqlite android android-room

我想在 Android Room byDELETE FROM...WHERE...IN (...)子句中按 ID 删除多行。下面是代码:

项目道

@Dao
interface ItemDao {
    @Query("DELETE FROM Item WHERE id IN (:ids)")
    fun deleteItemByIds(ids: String)
}
Run Code Online (Sandbox Code Playgroud)

项目视图模型

class ItemViewModel(application: Application) : AndroidViewModel(application) {
    fun deleteByIds(ids: String) {
        mScope.launch(Dispatchers.IO) {
            mItemDao.deleteItemByIds(ids)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

项目活动

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)
}
Run Code Online (Sandbox Code Playgroud)

当只有一个 ID 时,代码有效。但是当有多个 ID 时,它不会。那么这里发生了什么?谢谢你的帮助。

Sdg*_*emi 18

处理WHERE IN子句时需要传递数组或列表。喜欢:

@Dao
interface ItemDao {
    @Query("DELETE FROM Item WHERE id IN (:ids)")
    fun deleteItemByIds(ids: Array<Long>)
}
Run Code Online (Sandbox Code Playgroud)