262 votes

Bibliothèque de persistance de pièce. Supprimer tout

Comment puis-je supprimer toutes les entrées d'une table spécifique à l'aide de Room Persistence Library? Je dois laisser tomber la table, mais je ne peux trouver aucune information sur la façon de procéder.

Seulement lorsque la base de données est en cours de migration ou pour charger toutes les entrées et les supprimer :)

595voto

yigit Points 634

Vous pouvez créer une méthode DAO pour cela.

 @Dao 
interface MyDao {
    @Query("DELETE FROM myTableName")
    public void nukeTable();
}
 

140voto

Richard Points 501

En tant que pièce 1.1.0 vous pouvez utiliser clearAllTables () qui:

Supprime toutes les lignes de toutes les tables enregistrées dans cette base de données en tant qu'entités ().

40voto

Si vous voulez supprimer une entrée de la table dans Room, appelez simplement cette fonction,

 @Dao
public interface myDao{
    @Delete
    void delete(MyModel model);
}
 

Mise à jour: Et si vous souhaitez supprimer le tableau complet, appelez la fonction ci-dessous,

   @Query("DELETE FROM MyModel")
  void delete();
 

Remarque: MyModel est un nom de table.

15voto

Adewale Balogun Points 534

Utilisez clearAllTables () avec RXJava comme ci-dessous afin d'éviter java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

 Completable.fromAction(new Action() {
        @Override
        public void run() throws Exception {
            getRoomDatabase().clearAllTables();
        }
    }).subscribeOn(getSchedulerProvider().io())
            .observeOn(getSchedulerProvider().ui())
            .subscribe(new Action() {
                @Override
                public void run() throws Exception {
                    Log.d(TAG, "--- clearAllTables(): run() ---");
                    getInteractor().setUserAsLoggedOut();
                    getMvpView().openLoginActivity();
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    Log.d(TAG, "--- clearAllTables(): accept(Throwable throwable) ----");
                    Log.d(TAG, "throwable.getMessage(): "+throwable.getMessage());


                }
            });
 

3voto

Hamlet Leon Points 309

En combinant ce que dit Dick Lucas et en ajoutant une réinitialisation automatique à partir d'autres publications de StackOverFlow, je pense que cela peut fonctionner:

     fun clearAndResetAllTables(): Boolean {
        val db = db ?: return false

        // reset all auto-incrementalValues
        val query = SimpleSQLiteQuery("DELETE FROM sqlite_sequence")

        db.beginTransaction()
        return try {
            db.clearAllTables()
            db.query(query)
            db.setTransactionSuccessful()
            true
        } catch (e: Exception){
            false
        } finally {
            db.endTransaction()
        }
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X