web-dev-qa-db-ja.com

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)を使用できないので、パラメーターによって特定の行を削除するにはどうすればよいですか?

38
Jack

部屋の美しさは、オブジェクトで遊ぶことです。要件に従って、kotlinに使用できます:

@Delete
fun delete(model: LanguageModel)

javaの場合:

@Delete
void delete(LanguageModel model)

同じ値でdbに保存されている正確なオブジェクトを削除します。 LanguageModelは私のモデルクラスであり、完全に機能します。

40
Awais

実際、@Queryを使用して削除を実行できます。

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

Query javadoc から抽出:

UPDATEまたはDELETEクエリは、voidまたはintを返すことができます。 intの場合、値はこのクエリの影響を受ける行の数です。

100
Maragues