Jak programowo usunąć bazę danych SQLite z Androida


151

Chciałbym Android file systemprogramowo usunąć plik bazy danych z programu ? Czy mogę uruchomić skrypt powłoki, adbktóry z kolei uruchamia skrypt powłoki w przestrzeni Androida w celu usunięcia bazy danych? Czy mogę to zrobić z poziomu JUnitprzypadku testowego (za pomocą system()połączenia)?

Jak usunąć całą bazę danych w systemie Android? Muszę wszystko odejść, aby móc przetestować tworzenie bazy danych. Mogę porzucić stoły, ale to nie wystarczy. To jest w emulatorze, a nie w telefonie.

Odpowiedzi:


410

Gdy masz już swój kontekst i znasz nazwę bazy danych, użyj:

context.deleteDatabase(DATABASE_NAME);

Kiedy ta linia zostanie uruchomiona, baza danych powinna zostać usunięta.


14
Przed usunięciem upewnij się, że zamknąłeś wszystkie połączenia z bazą danych. W przeciwnym razie będziesz musiał ponownie uruchomić aplikację.
Jay Soyer

Proste i przydatne ... dzięki!
Marco Espinoza

13

Po prostu wpisz ze swojej powłoki:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db

Otrzymuję z powrotem komunikat „rm failed for mydatabase.db, odmowa uprawnień”. Czy musisz mieć zrootowany telefon, aby to zadziałało? Czy jest sposób na określenie pozwolenia? Czy działa tylko na emulatorze?
PeteH

2
@PeteH Na emulatorze nie potrzebujesz pozwolenia, ale w przypadku prawdziwego urządzenia musisz być
zrootowany

9
To wymaga roota i nie jest programowe .
Zoe,

Dla mnie nie wymagało to specjalnej konfiguracji. To znaczy pewnie, automatycznie logowałem się jako root, ale wszystko działało :)
vlad-ardelean

OK, jestem tutaj. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Poza usuwaniem, kopiowaniem i innymi rzeczami, czy nie ma polecenia dirlub list fileslub what the heck is in this directory/folder?
DSlomer64

12

Metoda statyczna SQLiteDatabase.deleteDatabase (plik pliku) została dodana w API 16. Jeśli chcesz pisać aplikacje obsługujące starsze urządzenia, jak to zrobić?

Próbowałem: file.delete ();

ale psuje SQLiteOpenHelper.

Dzięki.

NIEWAŻNE! Później zdałem sobie sprawę, że używasz Context .deleteDatabase (). Kontekst działa świetnie i usuwa również dziennik. Pracuje dla mnie.

Zauważyłem również, że muszę wywołać SQLiteOpenHelp.close () przed usunięciem, aby móc następnie użyć LoaderManager do ponownego utworzenia.


11

Próbować:

this.deleteDatabase(path); 

lub

context.deleteDatabase(path);

6

Również z Eclipse możesz użyć DDMS, co sprawia, że ​​jest to naprawdę łatwe.

Po prostu upewnij się, że emulator jest uruchomiony, a następnie przełącz się na perspektywę DDMS w Eclipse. Będziesz mieć pełny dostęp do Eksploratora plików, który pozwoli ci wejść i łatwo usunąć całą bazę danych.


1
Czy to działa z rzeczywistym urządzeniem telefonicznym? Nie widziałem żadnych podfolderów w folderze danych podczas przeglądania w trybie DDMS.
sammiwei

1
Ale to pytanie dotyczy programowego usuwania bazy danych?
Simon,

6
context.deleteDatabase("database_name.db");

To może komuś pomóc. Musisz wspomnieć o rozszerzeniu, inaczej nie zadziała.


3

context.deleteDatabase (DATABASE_NAME); usunie bazę danych tylko wtedy, gdy wszystkie połączenia zostaną zamknięte. Jeśli utrzymujesz pojedynczą instancję do obsługi pomocnika bazy danych - łatwo jest zamknąć otwarte połączenie.

O ile program databasehelper jest używany w wielu miejscach przez bezpośrednie tworzenie instancji, funkcja deleteDatabase + killProcess wykona zadanie, nawet jeśli niektóre połączenia są otwarte. Można tego użyć, jeśli scenariusz aplikacji nie ma żadnych problemów z ponownym uruchomieniem aplikacji.


3

Usuń starą bazę Db po odinstalowaniu aplikacji.

Ustawienie android: allowBackup = "false" w tagu aplikacji w AndroidManifest.xml rozwiązało problem. Wygląda na to, że z jakiegoś dziwnego powodu system operacyjny Android przywracał się z kopii zapasowej za każdym razem, gdy wdrażałem aplikację.


3

możesz utworzyć obiekt pliku o bieżącej ścieżce bazy danych, a następnie usunąć go, gdy usuwamy plik z folderu

    File data = Environment.getDataDirectory();
    String currentDBPath = "/data/com.example.demo/databases/" + DATABASE_NAME;
    File currentDB = new File(data, currentDBPath);
    boolean deleted = SQLiteDatabase.deleteDatabase(currentDB);

0

Użyłem metody usuwania bazy danych Androida i baza danych została pomyślnie usunięta

public bool DeleteDatabase()
        {
            var dbName = "TenderDb.db";
            var documentDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            var path = Path.Combine(documentDirectoryPath, dbName);
            return Android.Database.Sqlite.SQLiteDatabase.DeleteDatabase(new Java.IO.File(path));
        }

0

Do "formatowania" bazy danych na urządzeniu użyłem następujących elementów po zmianie struktury bazy danych w zasobach. Po prostu odkomentowałem wiersz w MainActivity, gdy chciałem, aby baza danych została ponownie odczytana z zasobów. Spowoduje to zresetowanie wartości i struktury bazy danych urządzenia do pracy z zajętą ​​bazą danych w folderze zasobów.

    //database initialization. Uncomment to clear the database
    //deleteDatabase("questions.db");

Następnie zaimplementuję przycisk, który będzie uruchamiał deleteDatabase, dzięki czemu użytkownik będzie mógł zresetować jego postęp w grze.


-2

Z Menedżera aplikacji możesz usunąć całą aplikację z danymi. Lub po prostu dane samodzielnie. Obejmuje to bazę danych.

  1. Przejdź do Ustawień. Możesz przejść do menu ustawień w menu aplikacji lub w większości telefonów, pociągając w dół szufladę powiadomień i dotykając tam przycisku.

  2. Wybierz podmenu Aplikacje. W niektórych telefonach to menu będzie miało nieco inną nazwę, na przykład Menedżer aplikacji.

  3. Przesuń palcem w prawo do listy Wszystkie aplikacje. Zignoruj ​​listy uruchomionych i pobranych aplikacji. Chcesz mieć listę Wszystkie aplikacje.

  4. Wybierz aplikację, którą chcesz wyłączyć. Pojawi się ekran właściwości z przyciskiem Wymuś zatrzymanie w lewym górnym rogu i innym przyciskiem Wyłącz lub Odinstaluj aktualizacje w prawym górnym rogu.

  5. Usunąć dane.


8
OP powiedział programowo . Przechodzenie do ustawień i naciskanie przycisku nie odbywa się programowo.
mking

@mmking Byłem tego świadomy. Po prostu jest to najprostszy sposób na usunięcie bazy danych, a nie tabel i treści. Powiedział, że potrzebuje go do testowania tworzenia bazy danych, a to robi. Szukałem tego samego i zdecydowałem się na to.
f470071
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.