59 votes

Comment sauvegarder le fichier de base de données sur sdcard sur Android?

Je voudrais ajouter une fonctionnalité à mon application Android qui sauvegarde automatiquement la base de données sqlite sur la carte SD.

Quelle est la meilleure façon de s'y prendre? Des exemples / tutoriels disponibles?

122voto

skeniver Points 1032

Ce code fonctionne pour moi!

     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//{package name}//databases//{database name}";
            String backupDBPath = "{database name}";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
    }
 

Est-ce que quelqu'un sait si cela fonctionnera sur les téléphones non root? Je l'ai seulement essayé sur un G1 enraciné.

21voto

Rhys Points 159
 try {
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();

    if (sd.canWrite()) {
        String currentDBPath = "//data//"+ packageName +"//databases//"+dbList[0];
        String backupDBPath = dbList[0];
        File currentDB = new File(data, currentDBPath);
        File backupDB = new File(sd, backupDBPath);

        FileChannel src = new FileInputStream(currentDB).getChannel();
        FileChannel dst = new FileOutputStream(backupDB).getChannel();
        dst.transferFrom(src, 0, src.size());
        src.close();
        dst.close();
        Toast.makeText(getBaseContext(), backupDB.toString(), Toast.LENGTH_LONG).show();
    }
} catch (Exception e) {
    Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
 

Cela fonctionne contrairement aux exemples ci-dessus dans lesquels les "/" sont "\" ont perdu 20 minutes de ma vie à comprendre cela, mais j'aurais vraiment dû voir cela plus tôt. Le Toast vous dira où le fichier a été placé ou ce qui ne va pas quand il ne fonctionne pas.

10voto

Christopher Orr Points 58514

Les bases de données SQLite sont des fichiers entièrement autonomes et portables - vous pouvez simplement copier le fichier entier directement sur la carte SD.

Cependant, je voudrais d’abord vérifier si une carte SD est installée sur le périphérique et quel est son chemin (en utilisant Environment.getExternalStorageDirectory() ).

3voto

Austyn Mahoney Points 4252

J'ai répondu à une question similaire à celle-ci avec une méthode que vous pouvez placer dans votre SQLiteOpenHelper . C'est aussi simple que de copier le fichier db d'un stockage externe vers le stockage interne de l'application. Il existe également un code supplémentaire qui s'ouvre et lit le fichier de base de données pour s'assurer qu'il est dans le bon état pour qu'Android puisse effectuer des appels à la base de données.

1voto

Drakosha Points 6360

Il y a un code pour exporter la base de données sqlite vers XML sur la carte SD . Peut-être que c'est assez bon?

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