Comment puis-je supprimer toutes les entrées d'une table spécifique à l'aide de la bibliothèque de persistance de pièce? Je dois supprimer la table, mais je ne trouve aucune information sur la façon de procéder.
Uniquement lors de la migration de la base de données ou pour charger toutes les entrées et les supprimer :)
clearAllTables()
qui "supprime toutes les lignes de toutes les tables qui sont enregistrées dans cette base de données en tant qu'entités ()." J'ai inclus cela comme réponse ci-dessous, mais je reproduis ici pour plus de visibilité.Réponses:
Vous pouvez créer une méthode DAO pour ce faire.
la source
@Query
c'était limité aux choses qui retournent des ensembles de résultats (semblables àrawQuery()
). Très cool!@Delete
ne prend aucun paramètre et tout supprimer de la table? J'essaye de trouver le tracker de Room pour classer ça ...Ids
? J'ai aimé cela, mais les identifiants de table continuent d'augmenter. Dans une table réelle, les identifiants de suppression sont également supprimés pour recommencer à zéro.Depuis Room,
1.1.0
vous pouvez utiliser clearAllTables () qui:la source
SELECT name FROM sqlite_master WHERE type='table'
puis manuellementDELETE FROM {TABLE}
. Je n'ai pas testé cela cependant.Si vous souhaitez supprimer une entrée du tableau dans la salle, appelez simplement cette fonction,
Mise à jour: Et si vous souhaitez supprimer le tableau complet, appelez la fonction ci-dessous,
Remarque: Ici, MyModel est un nom de table.
la source
Utilisez clearAllTables () avec RXJava comme ci-dessous pour éviter
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
la source
J'ai eu des problèmes avec la méthode de suppression de toutes les méthodes lors de l'utilisation de RxJava pour exécuter cette tâche en arrière-plan. Voici comment je l'ai finalement résolu:
et
la source
thread {}
lieu de le futzing avec RxJavaEn combinant ce que dit Dick Lucas et en ajoutant une réinitialisation auto-incrémentielle à partir d'autres publications StackOverFlow, je pense que cela peut fonctionner:
la source
Pour utiliser la salle sans abuser de l'
@Query
annotation, utilisez d'abord@Query
pour sélectionner toutes les lignes et les mettre dans une liste, par exemple:@Query("SELECT * FROM your_class_table")
Mettez sa liste dans l'annotation de suppression, par exemple:
@Delete
la source
Voici comment je l'ai fait à Kotlin.
Injectez room db dans l'activité en utilisant DI (Koin).
Ensuite, vous pouvez simplement appeler clearAllTables ()
plaisir privé clearRoomDB () {GlobalScope.launch {appDB.clearAllTables () preferences.put (PreferenceConstants.IS_UPLOADCATEGORIES_SAVED_TO_DB, false) preferences.put (PreferenceConstants.IS_MEMBERHANDBOOK_SAVED_TO_DB, false)}}
la source