Wie kann ich alle Einträge in einer bestimmten Tabelle mithilfe der Room Persistence Library löschen? Ich muss die Tabelle löschen, kann aber keine Informationen dazu finden.
Nur wenn die Datenbank migriert oder alle Einträge geladen und gelöscht werden :)
clearAllTables()
"Löscht alle Zeilen aus allen Tabellen, die in dieser Datenbank als Entitäten registriert sind ()." Ich habe dies als Antwort unten angegeben, reproduziere es hier jedoch zur besseren Sichtbarkeit.Antworten:
Sie können dazu eine DAO-Methode erstellen.
quelle
@Query
auf Dinge beschränkt war, die Ergebnismengen zurückgeben (ähnlichrawQuery()
). Sehr cool!@Delete
kein Parameter verwendet wird und alle aus der Tabelle löschen? Ich versuche, Room's Tracker zu finden, um das einzureichen ...Ids
? Das hat mir gefallen, aber die Tabellen-IDs werden weiter erhöht. In realen Tabellen werden Drop-IDs ebenfalls gelöscht, um wieder bei 0 zu beginnen.Ab Room können
1.1.0
Sie clearAllTables () verwenden, die:quelle
SELECT name FROM sqlite_master WHERE type='table'
und dann manuell ausprobierenDELETE FROM {TABLE}
. Habe das aber nicht getestet.Wenn Sie einen Eintrag aus der Tabelle in Room löschen möchten, rufen Sie einfach diese Funktion auf.
Update: Und wenn Sie die vollständige Tabelle löschen möchten, rufen Sie die folgende Funktion auf:
Hinweis: Hier ist MyModel ein Tabellenname.
quelle
Verwenden Sie clearAllTables () mit RXJava wie unten beschrieben, um dies zu vermeiden
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
quelle
Ich hatte Probleme beim Löschen aller Methoden, wenn ich RxJava zum Ausführen dieser Aufgabe im Hintergrund verwendete. So habe ich es endlich gelöst:
und
quelle
thread {}
einpacken, anstatt mit RxJavaWenn ich das kombiniere, was Dick Lucas sagt, und ein Reset automatisch inkrementell aus anderen StackOverFlow-Posts hinzufüge, denke ich, dass dies funktionieren kann:
quelle
Um den Raum ohne Missbrauch der
@Query
Anmerkung zu nutzen@Query
, wählen Sie zunächst alle Zeilen aus und fügen Sie sie in eine Liste ein. Beispiel:@Query("SELECT * FROM your_class_table")
Fügen Sie seine Liste in die Löschanmerkung ein, zum Beispiel:
@Delete
quelle
So habe ich es in Kotlin gemacht.
Injizieren Sie Raum db in die Aktivität mit DI (Koin).
Dann können Sie einfach clearAllTables () aufrufen.
privater Spaß clearRoomDB () {GlobalScope.launch {appDB.clearAllTables () settings.put (PreferenceConstants.IS_UPLOADCATEGORIES_SAVED_TO_DB, false) settings.put (PreferenceConstants.IS_MEMBERHANDBOOK_SAVED_TO_DB, false)}}
quelle