android - recuperar - como eliminar todas las canciones de spotify
Biblioteca de persistencia de sala. Eliminar todos (7)
A partir de la habitación
1.1.0
puede usar
clearAllTables()
que:
Elimina todas las filas de todas las tablas que están registradas en esta base de datos como entidades ().
¿Cómo puedo eliminar todas las entradas en una tabla específica usando la Biblioteca de persistencia de sala? Necesito abandonar la tabla, pero no puedo encontrar ninguna información sobre cómo hacerlo.
Solo cuando la base de datos está migrando o para cargar todas las entradas y eliminarlas :)
Combinando lo que dice Dick Lucas y agregando un reinicio automático de otras publicaciones de , creo que esto puede funcionar:
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()
}
}
Para usar la sala sin abusar de la anotación
@Query
primero use
@Query
para seleccionar todas las filas y colocarlas en una lista, por ejemplo:
@Query("SELECT * FROM your_class_table")
List`<`your_class`>` load_all_your_class();
Ponga su lista en la anotación de eliminación, por ejemplo:
@Delete
void deleteAllOfYourTable(List`<`your_class`>` your_class_list);
Puede crear un método DAO para hacer esto.
@Dao
interface MyDao {
@Query("DELETE FROM myTableName")
public void nukeTable();
}
Si desea eliminar una entrada de la tabla en la sala, simplemente llame a esta función,
@Dao
public interface myDao{
@Delete
void delete(MyModel model);
}
Actualización: y si desea eliminar la tabla completa, llame a la siguiente función,
@Query("DELETE FROM MyModel")
void delete();
Nota: Aquí MyModel es un nombre de tabla.
Tuve problemas con eliminar todo el método al usar RxJava para ejecutar esta tarea en segundo plano. Así es como finalmente lo resolví:
@Dao
interface UserDao {
@Query("DELETE FROM User")
fun deleteAll()
}
y
fun deleteAllUsers() {
return Maybe.fromAction(userDao::deleteAll)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ({
d("database rows cleared: $it")
}, {
e(it)
}).addTo(compositeDisposable)
}
Use
clearAllTables()
con RXJava como se muestra a continuación para evitar
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());
}
});