带有参数的Android Room @Delete

时间:2017-11-28 18:49:21

标签: java android sql android-room

我知道我不能在查询中使用DELETE(顺便说一句,这是一种耻辱),我会收到以下错误:

<i>Error:error: Observable query return type (LiveData, Flowable etc) can only be used with SELECT queries that directly or indirectly (via @Relation, for example) access at least one table.</i>

但我无法使用@Delete(WHERE... xxx) 那么如何通过参数删除特定行?

3 个答案:

答案 0 :(得分:82)

实际上,您可以使用@Query执行删除。

@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);

摘自Query javadoc

  

UPDATE或DELETE查询可以返回void或int。如果它是一个int,那么   value是受此查询影响的行数。

答案 1 :(得分:32)

房间的美丽是,我们玩物体。根据您的要求,您可以使用 对于kotlin:

@Delete
fun delete(model: LanguageModel)

for Java:

@Delete
void delete(LanguageModel model)

它将删除存储在db中的具有相同值的确切对象。 LanguageModel是我的模型类,它可以很好地工作。

答案 2 :(得分:8)

您可以使用以下方法通过ID删除

@Query("DELETE FROM yourDB WHERE id = :id")
void deleteById(int id);

用于删除所有行

@Query("DELETE FROM yourDB")
void delete();