Sauvegarder et restaurer la base de données SQLite sur la carte SD

Comment puis-je sauvegarder ma base de données sur la carte sd automatiquement dans mon application? Et après, comment puis-je le restaurer?

  • Texture transparente dans OpenGL ES pour Android
  • Android Listview affiche un seul article
  • Les images JPEG ont des valeurs de pixels différentes sur plusieurs appareils
  • Android - Définir un délai d'attente pour un AsyncTask?
  • Appcompat-v7: 21.0.0 ne fonctionne pas avec le service google play 6.1+
  • Comment afficher une vue pendant 3 secondes, puis la cacher?
  • Qu'est-ce que Gradle dans Android Studio?
  • Comment faire référence à un jar externe dans un projet de bibliothèque Android dans IntelliJ v10
  • Ligne directrice à choisir parmi AsyncTaskLoader et AsyncTask à utiliser dans Fragment
  • Java.lang.SecurityException lors de l'installation de Apk
  • Évitez de supprimer les données de la base de données en cliquant sur le bouton «effacer les données» dans les paramètres de l'application sur le périphérique Android
  • Erreur de connexion ADB: Impossible de créer Debug Bridge: Impossible de démarrer le serveur AdB: impossible à détecter la version AdB, sortie AdB
  • 4 Solutions collect form web for “Sauvegarder et restaurer la base de données SQLite sur la carte SD”

    Voici mon code:

    // Local database InputStream input = new FileInputStream(from); // create directory for backup File dir = new File(DB_BACKUP_PATH); dir.mkdir(); // Path to the external backup OutputStream output = new FileOutputStream(to); // transfer bytes from the Input File to the Output File byte[] buffer = new byte[1024]; int length; while ((length = input.read(buffer))>0) { output.write(buffer, 0, length); } output.flush(); output.close(); input.close(); 

    Comment puis-je sauvegarder ma base de données sur la carte sd automatiquement dans mon application?

    Copiez-le en utilisant des E / S Java standard. Assurez-vous que vous ne possédez aucun objet SQLiteDatabase ouvert.

    Et ensuite, comment puis-je le restaurer?

    Copiez-le en utilisant des E / S Java standard. Assurez-vous que vous ne possédez aucun objet SQLiteDatabase ouvert sur l'ancienne base de données.

    Vous pouvez utiliser getPath() sur un objet SQLiteDatabase pour savoir où il réside, AFAIK (ne l'avez pas essayé).

    Merci aux réponses existantes. Voici la classe complète (avec l'utilisation de "getDatabasePath"):

     package com.levionsoftware.bills.data.db; import android.content.Context; import android.os.Environment; import android.widget.Toast; import com.levionsoftware.bills.MyApplication; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; /** * Created by denny on 16/05/2016. * Source: http://stackoverflow.com/questions/18322401/is-it-posible-backup-and-restore-a-database-file-in-android-non-root-devices */ public class BackupAndRestore { public static void importDB(Context context) { try { File sd = Environment.getExternalStorageDirectory(); if (sd.canWrite()) { File backupDB = context.getDatabasePath(DBHandler.getDBName()); String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); File currentDB = 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(); MyApplication.toastSomething(context, "Import Successful!"); } } catch (Exception e) { e.printStackTrace(); } } public static void exportDB(Context context) { try { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); File currentDB = context.getDatabasePath(DBHandler.getDBName()); 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(); MyApplication.toastSomething(context, "Backup Successful!"); } } catch (Exception e) { e.printStackTrace(); } } } 

    https://stackoverflow.com/a/18322762/293280

    La réponse ci-dessus sur une question en double fournit un excellent exemple d'importation et d'exportation de vos bases de données SQLite sur la carte SD. Regarde.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.