Android Room, как удалить несколько строк в таблице по списку идентификаторов - PullRequest
2 голосов
/ 02 апреля 2019

Наличие комнаты Android с тремя столами timestamp, index, details, и все три имеют

@PrimaryKey @ColumnInfo(name = "id") var id: Int = 0

имея 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>)
}

но он получает ошибку компилятора (аналогично для всех трех)

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

если удалить по одному идентификатору, это сработало.

Как удалить по списку идентификаторов?

@Query("delete from timestamp where id = :id")
fun deleteSingleTimestamp(id: Int)

1 Ответ

3 голосов
/ 02 апреля 2019

Спасибо, Саймон указывает на аналогичный вопрос, это должно быть сделано так:

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