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

 

DBDesigner

Hace muchos años que desarrollo aplicaciones en Visual C++, casi todas las aplicaciones que desarrollé tienen que interactuar con bases de datos.

Mi gestor de base de datos preferido es MySQL, las razones las explicare en otra ocasión. Pero este post es para comentarles sobre la fabulosa herramienta de modelamiento de datos DBDesigner, que esta en su Version 4.

Esta herramienta ademas de tener una interfaz muy bien diseñada (utilizando tecnicas avanzadas), corre tambien en Linux.

Personalmente esoy acostumbrado a tener mis datos en forma de script’s SQL, DBDesigner tiene funcionalidad de obtener el modelo a partir de una base de datos existente (Ingeniería Inversa) lo que es muy util.

Hay muchas funcionalidades que tiene esta herramienta, se las recomiendo.

Pueden descargarse la ultima version desde http://www.fabforce.net/dbdesigner4/ Se distribuye gratuitamente bajo licencia GNU GPL.

Update!: DBDesigner esta descontinuado!, el sucesor es MySQL WorkBench