Acceder

Ver la Versión Completa : [ CONSULTA ] copiar bd a paquete de la aplicacion


pyciy
07/05/14, 20:03:10
Hola, soy un poco pesado pero....
En mi aplicacion hago una copia de seguridad de una base de datos interna y la guardo en la sd.
Tengo una base de datos como copia de seguridad creada en la sd. Todo ok.
Ahora quiero restaurar esa base de datos a la aplicacion de nuevo, como lo hago?

kriogeN
07/05/14, 23:37:03
El directorio interno de tu aplicación lo puedes sacar con el método getFilesDir() en la Activity.

A partir de ahí, para copiar un fichero a ese directorio pues lo típico, creando un InputStream sobre el fichero de origen y un OutputStream sobre el fichero de destino e ir leyendo los bytes de uno y copiarlo en el otro.

oxot
09/05/14, 10:50:47
Tal cual te lo comenta kriogeN. Has de tener la base de datos interna abierta e ir copiando la de SD sobre la interna. Te dejo un código que usé en un pequeño programa que hice de BD:


private void copyDataBase(String path) throws IOException
{

File file = new File(path, DB_NAME);

InputStream inputStr = mContext.getAssets().open(DB_NAME + ".DB");
OutputStream outStr = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;

try{
while ((length = inputStr.read(buffer)) > 0)
{
try{
outStr.write(buffer, 0, length);
}catch (IndexOutOfBoundsException e){
show("copyDataBase: Error while reading the array");
}
}
}finally{
outStr.flush();
outStr.close();
inputStr.close();
}
}

Aquí: DB_NAME es el nombre de la base de datos (uso el mismo para la interna que para la externa) que lo tengo en una constante.
El parámetro path de los argumentos es el destino dónde se encuentra la base de datos interna, en mi caso era: /data/data/nombre_del_paquete/databases que es dónde se guardan las BD por defecto.
Luego un simple input-output stream para ir copiando una sobre otra.

Espero te sirva. Un saludo.

pyciy
09/05/14, 22:13:18
Ya lo consegui, muchisimas gracias