Copia de seguridad y restauración de la base de datos SQLite a sdcard

¿Cómo puedo hacer una copia de seguridad de mi base de datos en la tarjeta sdcard automáticamente en mi aplicación? Y después, ¿cómo puedo restaurarlo?

Aquí está mi código:

// 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(); 

¿Cómo puedo hacer una copia de seguridad de mi base de datos en la tarjeta sdcard automáticamente en mi aplicación?

Copíelo utilizando Java I / O estándar. Asegúrese de no tener ningún objeto abierto de SQLiteDatabase , sin embargo.

Y después ¿cómo puedo restaurarlo?

Copíelo utilizando Java I / O estándar. Asegúrese de que no tiene ningún objeto abierto SQLiteDatabase a la base de datos antigua, sin embargo.

Puede utilizar getPath() en un objeto SQLiteDatabase para averiguar dónde reside, AFAIK (no lo ha intentado).

Gracias a las respuestas existentes. Aquí está la clase completa (con el uso 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 respuesta anterior en una pregunta duplicada proporciona un gran ejemplo de importación y exportación de sus BDs SQLite a la tarjeta SD. Echar un vistazo.

  • No se pudo recuperar datos de la base de datos a listview.
  • ¿Por qué fue InsertHelper obsoleta?
  • Obtener imagen Blob y convertir esa imagen en imagen de mapa de bits
  • Restablecer autoincremento en Android SQLite
  • Error desconocido (código 14): No se pudo abrir la base de datos
  • Se abren varias bases de datos de Android
  • E / SQLiteLog: (10) No se pudo leer el archivo, obtuvo: 0, amt: 100, last Errno: 2
  • Android: ¿Qué tan segura es la base de datos con la aplicación
  • El ejemplo de NotesDbAdapter es para una tabla, ¿qué hay de varias tablas?
  • Necesita un buen método para cambiar (SQLite) tipo de datos de columna
  • SQLite: No se puede enlazar argumento en el índice 1 porque el índice está fuera de rango. La sentencia tiene 0 parámetros
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.