Jak mogę usunąć wszystkie wpisy z określonej tabeli za pomocą biblioteki utrwalania pokoju? Muszę upuścić tabelę, ale nie mogę znaleźć żadnych informacji, jak to zrobić.
Tylko wtedy, gdy baza danych migruje lub ładuje wszystkie wpisy i usuwa je :)
Jak mogę usunąć wszystkie wpisy z określonej tabeli za pomocą biblioteki utrwalania pokoju? Muszę upuścić tabelę, ale nie mogę znaleźć żadnych informacji, jak to zrobić.
Tylko wtedy, gdy baza danych migruje lub ładuje wszystkie wpisy i usuwa je :)
clearAllTables()
która „usuwa wszystkie wiersze ze wszystkich tabel zarejestrowanych w tej bazie danych jako encje ()”. Zamieściłem to jako odpowiedź poniżej, ale odtwarzam tutaj dla widoczności.Odpowiedzi:
Aby to zrobić, możesz utworzyć metodę DAO.
źródło
@Query
było to ograniczone do rzeczy, które zwracają zestawy wyników (podobne dorawQuery()
). Bardzo fajny!@Delete
nie pobierał parametrów i usunąć wszystko z tabeli? Usiłuję znaleźć moduł śledzący Rooma, który go zarejestruje ...Ids
? Podobało mi się to, ale identyfikatory tabeli nadal rosną. W prawdziwym upuszczaniu tabeli identyfikatory są również upuszczane, aby ponownie zacząć od zera.Od Room
1.1.0
możesz używać clearAllTables (), które:źródło
SELECT name FROM sqlite_master WHERE type='table'
a następnie ręcznieDELETE FROM {TABLE}
. Nie przetestowałem tego jednak.Jeśli chcesz usunąć wpis z tabeli w pokoju, po prostu wywołaj tę funkcję,
Aktualizacja: jeśli chcesz usunąć całą tabelę, wywołaj funkcję poniżej,
Uwaga: Tutaj MyModel jest nazwą tabeli.
źródło
Użyj clearAllTables () z RXJava, jak poniżej, aby uniknąć
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
źródło
Miałem problemy z usunięciem wszystkich metod podczas korzystania z RxJava do wykonania tego zadania w tle. Oto jak w końcu to rozwiązałem:
i
źródło
thread {}
zamiast kupować za pomocą RxJavaŁącząc to, co mówi Dick Lucas i dodając reset autoincremental z innych postów StackOverFlow, myślę, że to może działać:
źródło
Aby skorzystać z Pokoju bez nadużywania
@Query
adnotacji, najpierw@Query
wybierz wszystkie wiersze i umieść je na liście, na przykład:@Query("SELECT * FROM your_class_table")
Umieść swoją listę w adnotacji usuwania, na przykład:
@Delete
źródło
Oto jak to zrobiłem w Kotlinie.
Wstrzyknij db pokoju w aktywności za pomocą DI (Koin).
Następnie możesz po prostu wywołać clearAllTables ()
prywatna zabawa clearRoomDB () {GlobalScope.launch {appDB.clearAllTables () preferences.put (PreferenceConstants.IS_UPLOADCATEGORIES_SAVED_TO_DB, false) preferences.put (PreferenceConstants.IS_MEMBERHANDBOOK_SAVED_TO}}}
źródło