web-dev-qa-db-fra.com

Comment supprimer la base de données SQLite de Android par programme

Je souhaite supprimer le fichier de base de données du programme Android file system? Puis-je lancer un script Shell adb qui à son tour exécute un script Shell dans l'espace Android pour supprimer la base de données? Est-ce que je peux le faire depuis un scénario de test JUnit (avec un appel system()?)?

Comment supprimer une base de données complète sous Android? Je dois tout faire pour pouvoir tester la création de base de données. Je peux laisser tomber les tables, mais ça ne suffit pas. Ceci est dans l'émulateur, pas sur un téléphone.

148
Jim

Une fois que vous avez votre contexte et connaissez le nom de la base de données, utilisez:

context.deleteDatabase(DATABASE_NAME);

Lorsque cette ligne est exécutée, la base de données doit être supprimée.

401
Luke Dunstan

C'est facile, il suffit de taper depuis votre shell:

adb Shell
cd /data/data
cd <your.application.Java.package>
cd databases
su rm <your db name>.db
13
barmaley

La méthode statique SQLiteDatabase.deleteDatabase (fichier) a été ajoutée à l'API 16. Si vous souhaitez écrire des applications prenant en charge des appareils plus anciens, comment procédez-vous?

J'ai essayé: file.delete ();

mais ça dérange SQLiteOpenHelper.

Merci.

NEVER MIND! J'ai compris par la suite que vous utilisiez contexte. DeleteDatabase (). Le contexte fonctionne très bien et supprime le journal aussi. Travaille pour moi.

De plus, j'ai découvert que j'avais besoin d'appeler SQLiteOpenHelp.close () avant de supprimer, pour pouvoir ensuite utiliser LoaderManager pour le recréer.

11
Rick Falck

Essayer:

this.deleteDatabase(path); 

ou

context.deleteDatabase(path);
10
Dnyanesh

Également, vous pouvez également utiliser DDMS, ce qui facilite grandement les choses.

Assurez-vous simplement que votre émulateur est en cours d'exécution, puis passez en perspective DDMS dans Eclipse. Vous aurez un accès complet à l'explorateur de fichiers qui vous permettra d'entrer et de supprimer facilement la base de données entière.

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

Cela pourrait aider quelqu'un. Vous devez mentionner l'extension sinon, cela ne fonctionnera pas.

5
vishwanath mirji

context.deleteDatabase (DATABASE_NAME); supprimera la base de données uniquement si toutes les connexions sont fermées. Si vous gérez une instance singleton pour gérer votre assistant de base de données, il est facile de fermer la connexion ouverte.

Si la databasehelper est utilisée à plusieurs endroits en instanciant directement, deleteDatabase + killProcess fera le travail même si certaines connexions sont ouvertes. Cela peut être utilisé si le scénario de l'application ne présente aucun problème pour le redémarrage de l'application.

3
Aun

vous pouvez créer un objet fichier du chemin de la base de données actuel, puis le supprimer au fur et à mesure que nous supprimons le fichier du dossier

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

Supprimez l'ancien DB lorsque vous désinstallez l'application.

Le réglage de Android: allowBackup = "false" dans la balise de l'application dans AndroidManifest.xml a résolu le problème. Il semble que, pour une raison quelconque, le système d'exploitation Android était en cours de restauration à partir d'une sauvegarde à chaque fois que je déployais l'application.

1
Anurag Mishra

J'ai utilisé la méthode de suppression de la base de données Android et la base de données supprimée avec succès

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
Afshin Razaghi

J'ai utilisé les éléments suivants pour "formater" la base de données sur le périphérique après avoir modifié la structure de la base de données dans les actifs. Je supprime simplement la ligne dans MainActivity lorsque je souhaite que la base de données soit à nouveau lue à partir des actifs. Cela réinitialisera les valeurs et la structure de la base de données de périphériques afin qu'elles correspondent à la base de données occupée dans le dossier des actifs.

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

Ensuite, je vais implémenter un bouton qui exécutera deleteDatabase afin que l'utilisateur puisse réinitialiser sa progression dans le jeu.

0
Jussi Tamminen