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?
Réponses
Trop de publicités?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é.
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.
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()
).
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.
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?