2010-12-10 9 views
131

Ich möchte die Datenbankdatei aus dem Android file system programmatisch löschen? Kann ich einen Shell-Skript-Start adb starten, der wiederum ein Shell-Skript im Android-Bereich ausführt, um die Datenbank zu löschen? Kann ich dies innerhalb eines JUnit Testfalls (mit einem system() Anruf) erledigen?Wie SQLite-Datenbank von Android programmgesteuert zu löschen

Wie lösche ich eine gesamte Datenbank in Android? Ich muss die ganze Sache verschwinden lassen, damit ich die Datenbankerstellung testen kann. Ich kann Tische fallen lassen, aber das ist nicht genug. Dies ist im Emulator, nicht auf einem Telefon.

Antwort

15

Es ist einfach nur Art von Shell:

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

kommt die Meldung zurück "rm für mydatabase.db fehlgeschlagen, Zugriff verweigert". Müssen Sie ein verwurzeltes Telefon haben, damit das funktioniert? Oder gibt es eine Möglichkeit, eine Berechtigung anzugeben? Oder funktioniert es nur auf dem Emulator? – PeteH

+2

@PeteH Auf Emulator benötigen Sie keine Erlaubnis, aber für echte Geräte müssten Sie rooten – barmaley

+4

Dies erfordert root und ** ist nicht programmgesteuert **. – Zoe

5

Auch von Eclipse kann man DDMS verwenden, die es einfach macht.

Stellen Sie sicher, dass Ihr Emulator ausgeführt wird, und wechseln Sie dann in Eclipse zur DDMS-Perspektive. Sie haben vollen Zugriff auf den Datei-Explorer, mit dem Sie die gesamte Datenbank problemlos öffnen und löschen können.

+1

Funktioniert das mit einem tatsächlichen Telefongerät? Ich konnte im DDMS-Modus keine Unterordner im Datenordner sehen. – sammiwei

+1

Aber diese Frage bezieht sich auf das Löschen der Datenbank programmgesteuert? – Simon

369

Sobald Sie Ihren Kontext und kennen den Namen der Datenbank, zu verwenden:

context.deleteDatabase(DATABASE_NAME); 

Wenn diese Zeile ausgeführt wird, soll die Datenbank gelöscht werden.

+0

* + 1 * es funktionierte für mich sehr gut. wenn ich versuchte, ganze sqlite-database aus meinem Code zu löschen. –

+4

funktioniert für mich, aber ich muss die Anwendung neu starten, um zu sehen, dass es keine Daten mehr gibt – max4ever

+4

arbeitete auch für mich. Aber App-Neustart erforderlich, um das Löschen der Datenbank zu "commit" ist inakzeptabel. Gibt es Workarounds dafür? – Shine

8

Die statische Methode SQLiteDatabase.deleteDatabase (File-Datei) wurde in API 16 hinzugefügt. Wenn Sie Apps schreiben möchten, die ältere Geräte unterstützen, wie tun Sie das?

Ich habe versucht: file.delete();

aber es vermasselt SQLiteOpenHelper.

Danke.

NIE MIND! Ich erkannte später, dass Sie Context .DeleteDatabase() verwenden. Der Context funktioniert super und löscht das Journal auch. Funktioniert bei mir.

Auch ich fand, dass ich SQLiteOpenHelp.close() vor dem Löschen aufrufen musste, damit ich dann LoaderManager verwenden konnte, um es neu zu erstellen.

3

context.deleteDatenbank (DATABASE_NAME); löscht die Datenbank nur, wenn alle Verbindungen geschlossen sind. Wenn Sie eine Singleton-Instanz für die Verarbeitung Ihres Datenbankhelfers verwalten, ist es einfach, die geöffnete Verbindung zu schließen.

Wenn der Datenbank-Helper an mehreren Stellen durch direktes Instanziieren verwendet wird, führt deleteDatabase + killProcess den Job aus, selbst wenn einige Verbindungen geöffnet sind. Dies kann verwendet werden, wenn das Anwendungsszenario keine Probleme beim Neustarten der App hat.

-2

Von Application Manager können Sie ganze Anwendung mit Daten löschen. Oder nur Daten von sich selbst. Dies beinhaltet die Datenbank.

  1. Navigieren Sie zu Einstellungen. Sie können das Einstellungsmenü entweder in Ihr apps-Menü oder, auf den meisten Telefonen, durch Ziehen der Benachrichtigung Schublade und Tippen auf eine Schaltfläche dort.

  2. Wählen Sie das Untermenü Apps. Auf einigen Telefonen hat dieses Menü einen leicht unterschiedlichen Namen wie zum Beispiel den Anwendungsmanager .

  3. Wischen Sie nach rechts auf die Alle Apps Liste. Ignoriere die Listen der laufenden und heruntergeladenen Apps. Sie möchten die Liste Alle Apps.

  4. Wählen Sie die App aus, die Sie deaktivieren möchten. Ein Bildschirm mit den Eigenschaften zeigt eine Schaltfläche für Force Stop oben links und eine weitere für Disable oder Uninstall updates auf der oberen rechten Seite an.

  5. Daten löschen.

+6

Das OP sagte * programmatisch *. Zu den Einstellungen gehen und einen Knopf drücken ist ** nicht ** programmatisch. – mmking

+0

@mmking Ich war mir dessen bewusst. Es ist nur, dass dies das einfachste ist, um Datenbanken zu entfernen und nicht Tabellen und Inhalte. Er sagte, er brauche es, um die Datenbankerstellung zu testen, und das tut das. Ich habe nach dem gleichen gesucht und mich darauf festgelegt. – f470071

9

Versuchen:

this.deleteDatabase(path); 

oder

context.deleteDatabase(path); 
Verwandte Themen