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
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,
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?
Hola,
Todavía tienes ese problema? Podría ayudarte pero no dispongo de una instalación de Windows ahora mismo (teamviewer?).
He mudado el repositorio a github para darle un mejor mantenimiento, si ya tienes resuelto el problema puedes enviar tu aporte al mismo repositorio.
https://github.com/latindev/vc-chess-basic/
Saludos.
un favor como puedo darle la ruta de donde quiero guardar el backup? quiero guardarla en una carpeta especifica por favor
Puedes ver la siguiente linea:
Log.i(«backup»,»backupDB=» + backupDB.getAbsolutePath());
Muestra la ruta donde se ha realizado el backup.
Puedes cambiarla a partir de la variable backupDBPath
he intentado y no me sale…
.getExternalStorageDirectory().getPath() + “/epsas/basebackup”);
como lo hiciste? porfaa ayuda
ya pude resolverlo gracias
como lo hiciste amigo?, necesito ayuda
he intentado y no me sale…
.getExternalStorageDirectory().getPath() + «/epsas/basebackup»);
me podrias decir como solucionaste tu problema??
Muchísimas gracias.
Hola! Que tal me gustaria saber mas de como lo implementaste en tu apk. Me podrias ayudar? Lo quiero implementar para sacar una base de mi apk.
Oscar VJ, supiste como implementarlo? aun no puedo hacerlo, me ayudarias bastante