¿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 :)
clearAllTables()
que "elimina todas las filas de todas las tablas que están registradas en esta base de datos como entidades ()". He incluido esto como respuesta a continuación, pero estoy reproduciendo aquí para mayor visibilidad.Respuestas:
Puede crear un método DAO para hacer esto.
fuente
@Query
se limitaba a cosas que devuelven conjuntos de resultados (similares arawQuery()
). ¡Muy genial!@Delete
no tome ningún parámetro y eliminar todo de la tabla? Estoy tratando de encontrar el rastreador de Room para archivar eso ...Ids
? Me gustó esto, pero los ID de tabla continúan incrementándose. En la caída de la tabla real, los ID también se descartan para comenzar desde 0 nuevamente.A partir de Room
1.1.0
, puede usar clearAllTables () que:fuente
SELECT name FROM sqlite_master WHERE type='table'
y luego manualmenteDELETE FROM {TABLE}
. Sin embargo, no he probado esto.Si desea eliminar una entrada de la tabla en la sala, simplemente llame a esta función,
Actualización: y si desea eliminar la tabla completa, llame a la siguiente función,
Nota: Aquí MyModel es un nombre de tabla.
fuente
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.
fuente
Tuve problemas con eliminar todo el método al usar RxJava para ejecutar esta tarea en segundo plano. Así es como finalmente lo resolví:
y
fuente
thread {}
lugar de usarlo en el futx con RxJavaCombinando lo que dice Dick Lucas y agregando un reinicio automático de otras publicaciones de StackOverFlow, creo que esto puede funcionar:
fuente
Para utilizar la sala sin abusar de la
@Query
anotación, primero use@Query
para seleccionar todas las filas y ponerlas en una lista, por ejemplo:@Query("SELECT * FROM your_class_table")
Ponga su lista en la anotación de eliminación, por ejemplo:
@Delete
fuente
Así es como lo hice en Kotlin.
Inyecte la habitación db en la actividad usando DI (Koin).
Entonces simplemente puede llamar a clearAllTables ()
private fun clearRoomDB () {GlobalScope.launch {appDB.clearAllTables () preferencias.put (PreferenceConstants.IS_UPLOADCATEGORIES_SAVED_TO_DB, false) preferencias.put (PreferenceConstants.IS_MEMBERHANDBOOK_SAVED_TO_DB, false)}}
fuente