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?
- Aplicación de Android (Samsung Galaxy Tab, 2.2) no * a veces * escribir en el DB
- No se pueden actualizar varias filas en el comando de actualización de la base de datos Sqlite en android
- ¿Es la operación costosa de SQLite cursor.getCount en Android
- Incremento automático de SQLite de Android
- Obtener base de datos SQLite desde la aplicación de Android
- HTML5 SQLite vs Base de datos nativa en caso de PhoneGap
- Android SQCipher ¿Necesito cerrar la base de datos?
- Cómo obtener el registro de llamadas desde fecha específica en android
- ¿Qué ORM java es adecuado para el sistema operativo Android y la lista de apoyo perezoso?
- Android getColumName y getColumnIndex
- Buscar sugerencias de diferentes tablas en diferentes actividades
- Android NullPointerException al ejecutar la consulta en la base de datos SQLite
- Alcanzó el tamaño MAX para la caché de instrucciones compiladas-sql para la base de datos
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.
- Cómo corregir el error "No se pudo detectar la versión de Mac OS X de la salida sw_vers: '10 .12 '" de Appium
- Calcule el rodamiento entre dos ubicaciones (lat, long)