157 votes

Comment supprimer une base de données SQLite d'Android de manière programmatique

Je voudrais supprimer le fichier de la base de données de la Android file system de manière programmatique ? Est-ce que je peux avoir un shell script lancé adb qui à son tour exécute un shell script dans l'espace Android pour effectuer la suppression de la base de données ? Puis-je faire cela à partir d'un JUnit de test (avec un system() appel) ?

Comment supprimer une base de données entière dans Android ? J'ai besoin de faire disparaître l'ensemble de la base pour pouvoir tester la création de la base de données. Je peux supprimer des tables, mais ce n'est pas suffisant. Ceci est dans l'émulateur, pas sur un téléphone.

426voto

Luke Dunstan Points 2368

Une fois que vous avez votre Contexte et que vous 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.

15 votes

Assurez-vous de fermer toutes les connexions de la base de données avant de la supprimer. Sinon, vous devrez redémarrer l'application.

15voto

Rick Falck Points 1005

La méthode statique SQLiteDatabase.deleteDatabase(File file) a été ajoutée dans l'API 16. Si vous voulez écrire des applications qui prennent en charge des appareils plus anciens, comment faire ?

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

mais cela perturbe SQLiteOpenHelper.

Gracias.

NE VOUS INQUIÉTEZ PAS ! J'ai réalisé plus tard que tu utilisais Contexte .deleteDatabase(). La méthode Context fonctionne parfaitement et supprime également le journal. Cela fonctionne pour moi.

De plus, j'ai découvert que j'avais besoin d'appeler SQLiteOpenHelp.close() avant de procéder à la suppression, afin que je puisse ensuite utiliser LoaderManager pour le recréer.

13voto

barmaley Points 7307

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

0 votes

Je reçois le message suivant : "rm failed for mydatabase.db, Permission denied". Faut-il avoir un téléphone rooté pour que cela fonctionne ? Ou y a-t-il un moyen de spécifier une permission ? Ou est-ce que ça ne fonctionne que sur l'émulateur ?

2 votes

@PeteH Sur l'émulateur, vous n'avez pas besoin de permission, mais pour un appareil réel, vous devez être rooté.

10 votes

Cela exige que Root et n'est pas programmable .

12voto

Drw Points 430

Essayez :

this.deleteDatabase(path); 

ou

context.deleteDatabase(path);

6voto

context.deleteDatabase("database_name.db");

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X