Android Room,如何通过ID列表删除表格中的多行

lan*_*nyf 3 sql-delete android-room

拥有一款Android房三个用表timestampindexdetails,以及三者有

@PrimaryKey @ColumnInfo(name = "id") var id: Int = 0
Run Code Online (Sandbox Code Playgroud)

必须fun clearDataByID(idList: List<Int>) 通过清除所有三个表id中的数据idList

道为:

@Dao
interface DataDAO {


@Transaction
fun clearDataByID(idList: List<Int>) {
    deleteDataInTimestamp(idList)
    deleteDataIndex(idList)
    deleteDataDetails(idList)
}

@Query("delete from timestamp where id in :idList")
fun deleteDataInTimestamp(idList: List<Int>)

@Query("delete from index where id in :idList")
fun deleteDataIndex(idList: List<Int>)

@Query("delete from details where id in :idList")
fun deleteDataDetails(idList: List<Int>)
}
Run Code Online (Sandbox Code Playgroud)

但是它会得到编译器错误(这三个都相似)

error: no viable alternative at input 'delete from timestamp where id in :idList'
public abstract void deleteDataInTimestamp(@org.jetbrains.annotations.NotNull()
Run Code Online (Sandbox Code Playgroud)

如果通过单个ID删除则可以。

如何通过ID列表删除?

@Query("delete from timestamp where id = :id")
fun deleteSingleTimestamp(id: Int)
Run Code Online (Sandbox Code Playgroud)

lan*_*nyf 9

感谢Simon指出了类似的问题,它应该像这样完成:

@Query("delete from timestamp where id in (:idList)")
fun deleteDataInTimestamp(idList: List<Int>) 
Run Code Online (Sandbox Code Playgroud)


Ank*_*rya 3

只是扩展@lannyf给出的答案

@Query("delete from timestamp where id in (:idList)")
fun deleteDataInTimestamp(idList: List<Int>) 
Run Code Online (Sandbox Code Playgroud)

这也可以这样写

@Query("delete from timestamp where id = :idList")
fun deleteDataInTimestamp(idList: List<Int>) 
Run Code Online (Sandbox Code Playgroud)

PS:编辑队列已满