簡體   English   中英

Android Room @Delete 帶參數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM