Java Android房间@Delete,带参数
我知道我不能在查询中使用Java Android房间@Delete,带参数,java,android,sql,android-room,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
(顺便说一句,这是一个遗憾),我将得到以下错误:
<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>
Error:Error:Observable查询返回类型(LiveData、Flowable等)只能与直接或间接(例如通过@Relation)访问至少一个表的SELECT查询一起使用。
但是我不能使用@Delete(其中…xxx)
那么如何通过参数删除特定行呢?实际上,您可以使用
@Query
执行删除操作
@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);
摘自:
更新或删除查询可以返回void或int。如果是int,则
值是受此查询影响的行数
房间的美在于,我们玩弄这些东西。根据要求,您可以使用 对于kotlin:
@Delete
fun delete(model: LanguageModel)
对于Java:
@Delete
void delete(LanguageModel model)
它将删除数据库中存储的具有相同值的确切对象。LanguageModel是我的模型类,它工作得很好。您可以使用下面的方法按ID删除
@Query("DELETE FROM yourDB WHERE id = :id")
void deleteById(int id);
用于删除所有行
@Query("DELETE FROM yourDB")
void delete();
这是有效的,我一直在使用类似的东西,删除所有是这样写的。为了便于参考,请检查此:()@Delete由于某些原因对我不起作用。但这是有效的@Rakesh您的实体中可能有一个自动生成的主id,这意味着您只能删除正在使用的某些参数,如此处的“userId”。两个问题,因为我有一个自动生成的主id dos,这意味着即使对于我的更新方法,我也必须使用id,以及
删除
之间的区别是什么(正常)使用id
查询执行delete
?只是一个小观察:只提到了@delete
注释方法的主键匹配。如果模型中没有主键定义,会发生什么还不清楚。如果要“删除数据库中存储的具有相同值的确切对象”,这将是无用的,因为对象在数据库中会发生变化,以后删除它们不需要我知道它们的确切数据;我只需要知道主键。@dbm中的实体至少需要一个主键roomdb@AndroidLearner这实际上是一个正确的观点。为未来访问者提供文档的快捷方式: