[英]Android Room @Delete with parameters
我知道我不能在查询中使用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)
那么如何通过参数删除特定行呢?
实际上,您可以使用@Query
来执行删除。
@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);
从查询 javadoc中提取:
UPDATE 或 DELETE 查询可以返回 void 或 int。 如果是 int,则值为受此查询影响的行数。
房间的美妙之处在于,我们玩弄物体。 根据要求,您可以用于 kotlin:
@Delete
fun delete(model: LanguageModel)
对于 Java:
@Delete
void delete(LanguageModel model)
它将删除存储在数据库中的具有相同值的确切对象。 LanguageModel 是我的模型类,它运行良好。
您可以使用以下方法按ID删除
@Query("DELETE FROM yourDatabaseTable WHERE id = :id")
void deleteById(int id);
删除所有行
@Query("DELETE FROM yourDatabaseTable")
void delete();
ROOM 数据库提供了在数据库中插入、更新和删除对象的简便方法。 要执行这样的操作,只需要注释@Delete。 DELETE 操作在删除单个对象成功时返回 Int返回 1 否则如果 DELETE 操作不成功则返回 0,添加返回类型是一个好习惯。
KotlineEG.kt
@Dao
interface EntityLocalDAO {
@Delete
fun deleteData(entityObject: EntityObject) : Int
}
javaEG.java
@Dao
interface EntityLocalDAO {
@Delete
int deleteData(EntityObject entityObject);
}
您现在可以仅使用部分数据进行删除。
根据文档:
@Entity
data class Playlist (
@PrimaryKey
val playlistId: Long,
val ownerId: Long,
val name: String,
@ColumnInfo(defaultValue = "normal")
val category: String
)
data class OwnerIdAndCategory (
val ownerId: Long,
val category: String
)
@Dao
public interface PlaylistDao {
@Delete(entity = Playlist::class)
fun deleteByOwnerIdAndCategory(varargs idCategory: OwnerIdAndCategory)
}
在此示例中,您可以看到他们仅使用 ownerId 和类别来删除播放列表。 您甚至不需要使用主键 (playlistId)。
关键是使用 @Delete(entity = Playlist::class) 注解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.