2010-02-09 5 views
4

Je suis à la recherche de moyens de sauvegarder la base de données de mon application sur un téléphone Android. Je sais que les bases de données SQLite ne sont que des fichiers, donc je m'attendrais à pouvoir copier le fichier sur la carte SD si celle-ci est disponible. Cependant, je ne suis pas sûr de savoir comment préparer ma base de données/activité pour la sauvegarde/restauration.Sauvegardes de base de données Android

Au démarrage, mon activité principale lit les entrées d'une table de la base de données et les affiche dans un ListView. Comme indiqué dans l'exemple «Notes» de l'API, j'ai un curseur qui est automatiquement averti des modifications apportées à cette table (ListView est automatiquement mis à jour lorsque j'ajoute/supprime/met à jour des enregistrements dans la table). Donc: Quand je copie le fichier de base de données sur la carte SD, je ne devrais pas avoir de problème. Mais que faire si l'utilisateur veut restaurer un fichier de base de données? Je ne peux pas simplement copier le fichier dans le dossier de données, puis-je (EDIT: ... alors qu'une vue affiche des données de la base de données et peut-être détient donc une connexion ouverte)?

Quelle serait la «meilleure pratique» lors de l'implémentation de la sauvegarde/restauration? Une approche que j'ai pris en compte est:

  1. Ouvrir une activité spéciale « restauration » qui détient aucune base de données ouverte connexions
  2. Appel finish() pour l'activité principale pour l'enlever et des liens étroits de base de données
  3. Copier le fichier de la base de données
  4. Ouvrir une nouvelle "instance" de l'activité principale
  5. Appelez finish() pour l'activité "restaurer"

Est-ce que ce serait le chemin à parcourir? Merci pour tout conseil!

Répondre

5

Mais que se passe-t-il si l'utilisateur veut restaurer un fichier de base de données? Je ne peux pas simplement copier le fichier dans le dossier de données, puis-je?

Oui, vous pouvez. Comme vous pouvez déplacer le fichier de votre dossier de données vers un dossier sur votre carte SD, vous pouvez déplacer le fichier en arrière de la carte SD dans votre dossier de données. Ce que vous avez proposé maintenant est une bonne approche, gardez à l'esprit que vous ne voulez pas d'objets de base de données ouverts pendant la sauvegarde/restauration.

+0

Ce que je voulais dire, c'est que je ne peux pas recopier le fichier lorsque la vue a une connexion ouverte. Lorsque je termine la vue qui a récupéré des données de la base de données, toutes les connexions doivent être fermées, n'est-ce pas? –

+0

Oui, c'est vrai, vous avez la bonne idée. –

+0

Très bien, merci, je vais essayer! –

Questions connexes