Como excluir todas as entradas de uma tabela específica usando a Biblioteca de persistência da sala? Preciso descartar a tabela, mas não consigo encontrar nenhuma informação sobre como fazer isso.
Somente quando o banco de dados estiver migrando ou para carregar todas as entradas e excluí-las :)
clearAllTables()
que "exclui todas as linhas de todas as tabelas registradas neste banco de dados como entidades ()". Incluí isso como resposta abaixo, mas estou reproduzindo aqui para obter visibilidade.Respostas:
Você pode criar um método DAO para fazer isso.
fonte
@Query
se limitava a coisas que retornam conjuntos de resultados (semelhante arawQuery()
). Muito legal!@Delete
não use nenhum parâmetro e excluir tudo da tabela? Eu estou tentando encontrar rastreador do quarto para o arquivo que ...Ids
? Eu fiz isso, mas os IDs de tabela continuam aumentando. Na queda real da tabela, os IDs também são eliminados para começar novamente a partir de 0.A partir da sala,
1.1.0
você pode usar clearAllTables () que:fonte
SELECT name FROM sqlite_master WHERE type='table'
e, em seguida, manualmenteDELETE FROM {TABLE}
. Ainda não testei isso.Se quiser excluir uma entrada da tabela na sala, basta chamar esta função,
Atualização: e se você deseja excluir a tabela completa, chame a função abaixo,
Nota: Aqui MyModel é um nome de tabela.
fonte
Use clearAllTables () com RXJava, como abaixo, 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.
fonte
Eu tive problemas com excluir todos os métodos ao usar o RxJava para executar esta tarefa em segundo plano. Foi assim que finalmente resolvi:
e
fonte
thread {}
vez de futzing com o RxJavaCombinando o que Dick Lucas diz e adicionando uma redefinição automática de outras postagens StackOverFlow, acho que isso pode funcionar:
fonte
Para usar a Sala sem abusar da
@Query
anotação, primeiro use@Query
para selecionar todas as linhas e colocá-las em uma lista, por exemplo:@Query("SELECT * FROM your_class_table")
Coloque sua lista na anotação de exclusão, por exemplo:
@Delete
fonte
Aqui está como eu fiz isso em Kotlin.
Injete o banco de dados db na atividade usando DI (Koin).
Então você pode simplesmente chamar clearAllTables ()
diversão privada clearRoomDB () {GlobalScope.launch {appDB.clearAllTables () Preferences.put (PreferenceConstants.IS_UPLOADCATEGORIES_SAVED_TO_DB, false) Preferences.put (PreferenceConstants.IS_MEMBERHANDBOOK_SAVED_TO_DB, false)}}
fonte