So löschen Sie die SQLite-Datenbank programmgesteuert von Android

151

Ich möchte die Datenbankdatei Android file systemprogrammgesteuert aus dem löschen ? Kann ich ein Shell-Skript starten, adbdas wiederum ein Shell-Skript im Android-Bereich ausführt, um die Datenbank zu löschen? Kann ich dies in einem JUnitTestfall (mit einem system()Anruf) erledigen ?

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

Jim
quelle

Antworten:

410

Wenn Sie Ihren Kontext haben und den Namen der Datenbank kennen, verwenden Sie:

context.deleteDatabase(DATABASE_NAME);

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

Luke Dunstan
quelle
14
Stellen Sie sicher, dass Sie alle Datenbankverbindungen schließen, bevor Sie sie löschen. Andernfalls müssen Sie die Anwendung neu starten.
Jay Soyer
Einfach und nützlich ... danke!
Marco Espinoza
13

Es ist einfach, einfach aus Ihrer Shell zu tippen:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db
Barmaley Roter Stern
quelle
Ich erhalte die Meldung "rm fehlgeschlagen für mydatabase.db, Berechtigung verweigert". Müssen Sie ein gerootetes Telefon haben, damit dies funktioniert? Oder gibt es eine Möglichkeit, eine Berechtigung anzugeben? Oder funktioniert es nur auf dem Emulator?
PeteH
2
@PeteH Auf dem Emulator benötigen Sie keine Erlaubnis, aber für ein echtes Gerät müssten Sie gerootet sein
Barmaley Red Star
9
Dies erfordert root und ist nicht programmgesteuert .
Zoe
Für mich war hierfür kein spezielles Setup erforderlich. Ich meine sicher, ich wurde automatisch als root angemeldet, aber alles hat funktioniert :)
vlad-ardelean
OK ich bin hier. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Gibt es außer Entfernen, Kopieren und anderen Dingen keinen diroder list filesoder what the heck is in this directory/folderBefehl?
DSlomer64
12

Die statische Methode SQLiteDatabase.deleteDatabase (Dateidatei) wurde in API 16 hinzugefügt. Wie gehen Sie vor, wenn Sie Apps schreiben möchten, die ältere Geräte unterstützen?

Ich habe versucht: file.delete ();

aber es bringt SQLiteOpenHelper durcheinander.

Vielen Dank.

KEINE URSACHE! Ich habe später festgestellt, dass Sie Context .deleteDatabase () verwenden. Der Kontext funktioniert hervorragend und löscht auch das Tagebuch. Funktioniert bei mir.

Außerdem musste ich vor dem Löschen SQLiteOpenHelp.close () aufrufen , damit ich es dann mit LoaderManager neu erstellen konnte.

Rick Falck
quelle
11

Versuchen:

this.deleteDatabase(path); 

oder

context.deleteDatabase(path);
Drw
quelle
6

Auch von Eclipse aus können Sie DDMS verwenden, was es wirklich einfach macht.

Stellen Sie einfach 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 löschen können.

xtempore
quelle
1
Funktioniert dies mit einem tatsächlichen Telefongerät? Ich konnte keine Unterordner unter Datenordner sehen, während ich die im DDMS-Modus anzeigte.
Sammiwei
1
Aber bei dieser Frage geht es darum, die Datenbank programmgesteuert zu löschen?
Simon
6
context.deleteDatabase("database_name.db");

Dies könnte jemandem helfen. Sie müssen die Erweiterung sonst erwähnen, es wird nicht funktionieren.

Vishwanath Mirji
quelle
3

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

Wenn der Datenbank-Helfer durch direkte Instanziierung an mehreren Stellen verwendet wird, erledigt die deleteDatabase + killProcess die Aufgabe auch dann, wenn einige Verbindungen geöffnet sind. Dies kann verwendet werden, wenn das Anwendungsszenario keine Probleme beim Neustart der App aufweist.

Aun
quelle
3

Löschen Sie die alte Datenbank, wenn Sie die App deinstallieren.

Das Festlegen von android: allowBackup = "false" im Anwendungstag in AndroidManifest.xml hat das Problem behoben. Es scheint, dass aus irgendeinem seltsamen Grund das Android-Betriebssystem jedes Mal, wenn ich die App bereitstellte, aus einem Backup wiederhergestellt wurde.

Anurag Mishra
quelle
3

Sie können ein Dateiobjekt mit dem aktuellen Datenbankpfad erstellen und es dann löschen, während wir die Datei aus dem Ordner löschen

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

Ich habe die Methode zum Löschen der Android-Datenbank verwendet und die Datenbank erfolgreich entfernt

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));
        }
Afshin Razaghi
quelle
0

Ich habe Folgendes zum "Formatieren" der Datenbank auf dem Gerät verwendet, nachdem ich die Struktur der Datenbank in Assets geändert habe. Ich kommentiere einfach die Zeile in MainActivity aus, wenn ich wollte, dass die Datenbank erneut aus den Assets gelesen wird. Dadurch werden die Gerätedatenbankwerte und die Struktur zurückgesetzt, um sie mit der besetzten Datenbank im Assets-Ordner zu bearbeiten.

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

Als nächstes werde ich eine Schaltfläche implementieren, mit der die deleteDatabase ausgeführt wird, damit der Benutzer den Fortschritt im Spiel zurücksetzen kann.

Jussi Tamminen
quelle
-2

Im Anwendungsmanager können Sie die gesamte Anwendung mit Daten löschen. Oder einfach nur Daten von selbst. Dies beinhaltet die Datenbank.

  1. Navigieren Sie zu Einstellungen. Sie können das Einstellungsmenü entweder in Ihrem Apps-Menü oder auf den meisten Telefonen aufrufen, indem Sie die Benachrichtigungsschublade herunterziehen und dort auf eine Schaltfläche tippen.

  2. Wählen Sie das Untermenü Apps. Auf einigen Telefonen hat dieses Menü einen etwas anderen Namen, z. B. Application Manager.

  3. Wischen Sie nach rechts zur Liste Alle Apps. Ignorieren Sie 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 Eigenschaftenbildschirm wird mit einer Schaltfläche für Force Stop oben links und einer weiteren Schaltfläche zum Deaktivieren oder Deinstallieren von Updates oben rechts angezeigt.

  5. Daten löschen.

f470071
quelle
8
Das OP sagte programmatisch . Das Aufrufen von Einstellungen und das Drücken einer Taste ist nicht programmgesteuert.
mmking
@mmking Ich war mir dessen bewusst. Es ist nur so, dass dies die einfachste Methode zum Entfernen von Datenbanken ist und nicht von Tabellen und Inhalten. Er sagte, er brauche es, um die Datenbankerstellung zu testen, und das macht das. Ich habe das Gleiche gesucht und mich damit zufrieden gegeben.
f470071