[英]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.