Ich weiß, dass ich es nicht verwenden kann DELETE bei einer Abfrage (das ist übrigens schade) erhalte ich folgenden Fehler:
<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>
Aber ich kann nicht verwenden @Delete(WHERE... xxx)
Wie lösche ich also eine bestimmte Zeile nach einem Parameter?
Maragues
Eigentlich können Sie verwenden @Query um eine Löschung durchzuführen.
@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);
UPDATE- oder DELETE-Abfragen können void oder int zurückgeben. Wenn es sich um eine Ganzzahl handelt, ist der Wert die Anzahl der Zeilen, die von dieser Abfrage betroffen sind.
das funktioniert, ich habe so etwas verwendet und alles löschen wird auch so geschrieben. Als Referenz überprüfen Sie dies: (stackoverflow.com/a/44249498/2185548)
– Gama der Große
10. April 2018 um 6:36 Uhr
@Delete funktioniert bei mir aus irgendeinem Grund nicht. Aber das funktioniert!
– Rakesch
31. Mai 2018 um 11:47 Uhr
@Rakesh Möglicherweise haben Sie eine automatisch generierte primäre ID in Ihrer Entität, was bedeutet, dass Sie nur löschen können, wenn Sie einen Parameter wie “userId” hier verwenden.
– Ajith MA
16. Oktober 2018 um 9:25 Uhr
Zwei Fragen, da ich eine automatisch generierte primäre ID habe, bedeutet das, dass ich auch für meine Update-Methoden eine ID verwenden muss, und was ist der Unterschied zwischen delete(normal) und delete mit id fragen?
– Georg Udosen
14. Februar 2019 um 15:08 Uhr
Danke für die Informationen @Maragues. die “UPDATE- oder DELETE-Abfragen können void oder int zurückgeben. Wenn es sich um eine Ganzzahl handelt, ist der Wert die Anzahl der Zeilen, die von dieser Abfrage betroffen sind.” Zeug ist das, wonach ich gesucht habe. bei mir hat es funktioniert.
– Fernando Pérez
26. August 2021 um 13:05 Uhr
Das Schöne am Raum ist, dass wir mit den Objekten spielen. Je nach Anforderung können Sie für kotlin verwenden:
@Delete
fun delete(model: LanguageModel)
für Java:
@Delete
void delete(LanguageModel model)
Es wird genau das Objekt gelöscht, das in der Datenbank mit denselben Werten gespeichert ist. LanguageModel ist meine Modellklasse und es funktioniert perfekt.
Nur eine kleine Beobachtung: Die Dokumentation erwähnt nur die Übereinstimmung mit Primärschlüsseln für @Delete kommentierte Methoden. Es ist etwas unklar, was passieren wird, wenn es im Modell keine Primärschlüsseldefinition gibt.
– dbm
27. Mai 2018 um 18:15 Uhr
Wenn es “genau das Objekt löschen würde, das in der Datenbank mit denselben Werten gespeichert ist”, wäre es nutzlos, da sich Objekte in der Datenbank ändern und das spätere Löschen nicht erfordern sollte, dass ich ihre genauen Daten kenne; Ich muss nur den Primärschlüssel kennen.
– Alaa M.
24. Juli 2020 um 8:58 Uhr
@dbm mindestens ein Primärschlüssel ist in einer Entität in roomdb erforderlich
Das ist nicht das Schöne, das ist mühsam, wenn Sie die zu löschende ID kennen, aber nicht das gesamte Objekt abrufen möchten
– Zaitmann
6. April um 6:37
Fachriddin Abdullaev
Sie können die folgende Methode verwenden, um nach ID zu löschen
@Query("DELETE FROM yourDatabaseTable WHERE id = :id")
void deleteById(int id);
für alle Zeilen löschen
@Query("DELETE FROM yourDatabaseTable")
void delete();
Hi! Ist es mit der zweiten Methode zum Löschen der Datenbank möglich, einen Wert (wahr oder falsch) zurückzugeben, ob die Löschung erfolgreich durchgeführt wurde, oder eine Notiz? Vielen Dank!
– Markus Delphi
28. August 2021 um 21:57 Uhr
@MarkDelphi Wenn delete Operation erfolgreich war, würde sie die Anzahl der gelöschten Zeilen zurückgeben. Also eine Rücksendung -1 impliziert, dass der Vorgang fehlgeschlagen ist.
– Sourav Kannantha B
9. November 2021 um 17:05 Uhr
Die ROOM-Datenbank bietet eine einfache Möglichkeit zum EINFÜGEN, AKTUALISIEREN und LÖSCHEN eines Objekts in der Datenbank. Um diese Operation auszuführen, musste nur @Delete kommentiert werden. Das Die DELETE-Operation gibt den Int zurück Wenn das Löschen des einzelnen Objekts erfolgreich ist, wird 1 zurückgegeben, andernfalls wird 0 zurückgegeben, wenn die DELETE-Operation nicht erfolgreich ist. Das Hinzufügen des Rückgabetyps ist eine bewährte Vorgehensweise.
KotlinEG.kt
@Dao
interface EntityLocalDAO {
@Delete
fun deleteData(entityObject: EntityObject) : Int
}
javaEG.java
@Dao
interface EntityLocalDAO {
@Delete
int deleteData(EntityObject entityObject);
}
Sie können jetzt löschen, indem Sie nur Teildaten verwenden.
@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)
}
In diesem Beispiel sehen Sie, dass sie die Playlist nur mit der OwnerId und der Kategorie löschen. Sie müssen nicht einmal den Primärschlüssel (playlistId) verwenden.
Der Schlüssel ist, die Annotation @Delete(entity = Playlist::class) zu verwenden.
13118600cookie-checkAndroid Room @Delete mit Parameternyes