Copia de seguridad de sqlite a la unidad sdcard en Android

Cuando ya tenemos una aplicación en producción y ocurre un problema causado por la base de datos suele ser complicado averiguar donde esta el problema, es buena idea tener una copia de la misma base de datos para ver exactamente que esta pasando.

Hace un tiempo que estaba buscando la manera de sacar un backup de la base de datos de una aplicación en Android, después de probar varias opciones encontré un segmento de código que sí ha funcionado:

public void backupdDatabase(){
    try {
	    File sd = Environment.getExternalStorageDirectory();
	    File data = Environment.getDataDirectory();
	    String packageName  = "com.yourapp.package";
	    String sourceDBName = "mydb.db";
	    String targetDBName = "mydb";
	    if (sd.canWrite()) {
	    	Date now = new Date();
		String currentDBPath = "data/" + packageName + "/databases/" + sourceDBName;
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm"); 
		String backupDBPath = targetDBName + dateFormat.format(now) + ".db";

		File currentDB = new File(data, currentDBPath);
		File backupDB = new File(sd, backupDBPath);

		Log.i("backup","backupDB=" + backupDB.getAbsolutePath());
		Log.i("backup","sourceDB=" + currentDB.getAbsolutePath());

		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) {
		Log.i("Backup", e.toString());
	}
}

Ustedes ya se encargan de cambiar los valores y mostrar los mensajes de error.

Me olvidaba que necesitarán del permiso para escribir en la memoria SD:

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

Obtenido de: Stackoverflow

 

14 pensamientos en “Copia de seguridad de sqlite a la unidad sdcard en Android

  1. Hola,

    He leído tu artículo, muy interesante, de como hacer una copia de seguridad de una BBDD SQLite, pero me gustaría saber como se puede restaurar luego.

    Muchas gracias de antemano,

  2. hola, me llamo ismael y necesito ayuda con un codigo escrito en visual c++
    Revisa la siguiente pagina
    http://www.latindevelopers.com/articulos/visualc/chess.php

    hay un codigo de ajedrez, se hizo en visual c++ 2005 y yo lo quiero pasar a 2012, ya hize el proyecto y todo no, pero el problema surge cuando pongo la función dibujartablero..

    En la parte de dibujar etiquetas
    ,e sale esto en esta parte del codigo

    //Dibujando las etiquetas
    if(j == 0 || j == 7)
    {

    rcCelda.left = j==0?MARGEN-15:rcCelda.right;
    rcCelda.right = j==0?MARGEN:rcCelda.right + 15;
    pDC->DrawText(m_vEtiquetas[i], &rcCelda, DT_CENTER|DT_VCENTER|DT_SINGLELINE);

    Error 2 error C2065: ‘m_vEtiquetas’ : identificador no declarado c:\users\jesúsismael\videos\ajedrez\ajedrez\ajedrez\ajedrezview.cpp 180

    como resuelvo ese problema, me podrias ayudar?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *