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

151

Je voudrais supprimer le fichier de base de données du Android file systemprogramme par programme? Puis-je lancer un script shell adbqui exécute à son tour un script shell dans l'espace Android pour supprimer la base de données? Puis-je faire cela à partir d'un JUnitscénario de test (avec un system()appel)?

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

Jim
la source

Réponses:

410

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.

Luke Dunstan
la source
14
Assurez-vous de fermer toutes les connexions à la base de données avant de supprimer. Sinon, vous devrez redémarrer l'application.
Jay Soyer
Simple et utile ... merci!
Marco Espinoza
13

C'est facile de taper simplement à partir de votre shell:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db
Étoile rouge Barmaley
la source
Je reçois le message "rm a échoué pour mydatabase.db, autorisation refusée". Devez-vous avoir un téléphone rooté pour que cela fonctionne? Ou existe-t-il un moyen de spécifier une autorisation? Ou cela ne fonctionne-t-il que sur l'émulateur?
PeteH
2
@PeteH Sur l'émulateur, vous n'avez pas besoin d'autorisation, mais pour un appareil réel, vous devez être enraciné
Barmaley Red Star
9
Cela nécessite root et n'est pas programmé .
Zoe le
Pour moi, cela ne nécessitait aucune configuration particulière. Je veux dire, bien sûr, j'étais automatiquement connecté en tant que root, mais tout a fonctionné :)
vlad-ardelean
OK je suis ici. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. À part la suppression, la copie et d'autres choses, n'y a-t-il pas une commande dirou list filesou what the heck is in this directory/folder?
DSlomer64
12

La méthode statique SQLiteDatabase.deleteDatabase (fichier fichier) a été ajoutée dans 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 cela gâche SQLiteOpenHelper.

Merci.

ÇA NE FAIT RIEN! J'ai réalisé plus tard que vous utilisiez Context .deleteDatabase (). Le Contexte fonctionne très bien et supprime également le journal. Travaille pour moi.

De plus, j'ai trouvé que j'avais besoin d'appeler SQLiteOpenHelp.close () avant de faire la suppression, afin de pouvoir ensuite utiliser LoaderManager pour le recréer.

Rick Falck
la source
11

Essayer:

this.deleteDatabase(path); 

ou

context.deleteDatabase(path);
Drw
la source
6

Aussi à partir d'Eclipse, vous pouvez utiliser DDMS, ce qui le rend vraiment facile.

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

xtempore
la source
1
Cela fonctionne-t-il avec un appareil téléphonique réel? Je ne pouvais voir aucun sous-dossier sous le dossier de données lors de la visualisation du en mode DDMS.
sammiwei
1
Mais cette question concerne la suppression de la base de données par programme?
Simon
6
context.deleteDatabase("database_name.db");

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

vishwanath mirji
la source
3

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 le databasehelper est utilisé à plusieurs endroits en instanciant directement, le deleteDatabase + killProcess fera le travail même si certaines connexions sont ouvertes. Cela peut être utilisé si le scénario d'application ne rencontre aucun problème lors du redémarrage de l'application.

Aun
la source
3

Supprimez l'ancienne base de données lors de la désinstallation de l'application.

La configuration de android: allowBackup = "false" dans la balise d'application dans AndroidManifest.xml a résolu le problème. Il semble que pour une raison étrange, le système d'exploitation Android restaurait à partir d'une sauvegarde à chaque fois que j'ai déployé l'application.

Anurag Mishra
la source
3

vous pouvez créer un objet fichier du chemin de base de données actuel , puis le supprimer lorsque 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);
DharmendraKumar Jagodana
la source
0

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

J'ai utilisé ce qui suit pour "formater" la base de données sur l'appareil après avoir changé la structure de la base de données en actifs. Je décommente simplement la ligne dans MainActivity lorsque je voulais 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 du périphérique à mach avec 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 la deleteDatabase afin que l'utilisateur puisse réinitialiser sa progression dans le jeu.

Jussi Tamminen
la source
-2

Depuis Application Manager, vous pouvez supprimer toute l'application avec des données. Ou juste des données par elles-mêmes. Cela inclut la base de données.

  1. Accédez aux paramètres. Vous pouvez accéder au menu des paramètres dans le menu de vos applications ou, sur la plupart des téléphones, en déroulant le tiroir de notification et en appuyant sur un bouton.

  2. Sélectionnez le sous-menu Applications. Sur certains téléphones, ce menu aura un nom légèrement différent tel que Gestionnaire d'applications.

  3. Balayez vers la droite jusqu'à la liste Toutes les applications. Ignorez les listes des applications en cours d'exécution et téléchargées. Vous voulez la liste Toutes les applications.

  4. Sélectionnez l'application que vous souhaitez désactiver. Un écran de propriétés apparaît avec un bouton pour Forcer l'arrêt en haut à gauche et un autre pour Désactiver ou Désinstaller les mises à jour sur le côté supérieur droit.

  5. Suprimmer les données.

f470071
la source
8
Le PO a dit par programme . Aller aux paramètres et appuyer sur un bouton n'est pas programmé.
mmking
@mmking j'en étais conscient. C'est juste que c'est la méthode la plus simple pour supprimer la base de données et non les tables et le contenu. Il a dit qu'il en avait besoin pour tester la création de bases de données et c'est ce qu'il fait. J'ai cherché la même chose et je me suis contenté de ça.
f470071