Como copiar una bd SQLite al directorio databases de una app Android

Un lector me ha preguntado en el artículo que escribí hace tiempo, Como acceder al fichero de una bd Sqlite en Android, como se puede hacer la operación contraria, es decir, copiar el fichero de base de datos al directorio databases desde otra localización.

Copiar un fichero de base de datos al directorio de bases de datos de una app Android, puede ser una técnica muy útil en algunos escenarios. Por ejemplo, la aplicación de un cliente, durante la primera ejecución, descargaba de internet una gran cantidad de información, la procesaba, y con ella creaba una base de datos Sqlite. Este proceso duraba mucho tiempo, entre 20 o 30 segundos dependiendo del hardware del dispositivo Android, y de la velocidad de conexión a internet. Y este proceso se realizaba durante la primera ejecución de la app, con lo cual, la tasa de abandonos de usuarios que acababan de instalar la app, y no veían razonable esperar 30 segundos a que la app se inicializará, era muy grande.

La solución fue incluir el fichero de base de datos sqlite ya creado, en la carpeta assets de nuestro proyecto, y durante la primera ejecución, copiarlo al directorio databases. Pasamos de una primera ejecución de más de 20 segundos, a que el lanzamiento de la app fuera casi instantáneo, a lo sumo tarda dos o tres segundos. La receta, es la siguiente:

 

Creamos un proyecto de Android Studio mínimo como ejemplo, y en el directorio “assets” del proyecto, incluimos el fichero de base de datos sqlite que queremos desplegar. En nuestro caso el fichero se llama “cache“, y es una base de datos de unos 5Mb, que apenas engorda el tamaño del apk, pero que si la tuviésemos que descargar de internet y crear al vuelo, ralentizaría la primera ejecución de nuesta app más allá de lo razonable.

Tras copiar el fichero sqlite al directorio assets, tendremos algo similar a lo siguiente:

Fichero de sqlite en le directorio assets
Fichero de sqlite en le directorio assets

El fichero puede provenir de otro directorio, por ejemplo, del directorio de descargas de vuestro teléfono, o cualquier otro directorio. En ese caso tendrías que idear un mecanismo para que el usuario seleccione la ubicación del fichero del árbol de directorios. Para mantener el ejemplo sencillo, nuestra base de datos está en el directorio “assets”, y el objetivo es copiarla al directorio “/data/data/com.hell_desk.deploydatabase/databases”. Obviamente, en el caso de una aplicación con un nombre de paquete diferente, la ruta será distinta.

En nuestra actividad principal, añadimos un pequeño método que hará la copia:

Bien, como veis, el snippet es muy sencillito. Lo primero que hace es construir la ruta al directorio donde se copiará la base de datos. A continuación crea un InputStream al fichero sqlite que tenemos en assets, y lo copia a la carpeta de destino.

Ya podéis usar ese fichero de base de datos en vuestra aplicación.

2 comentarios en “Como copiar una bd SQLite al directorio databases de una app Android

  1. Muchas gracias por contestar solo una pregunta, como podria hacer para que me en inputStream me coja la base de datos de la carpeta descargas …
    Un saludo!!

    • Facil, tienes que darle la ruta al fichero en la carpeta de descargas. ¿Como averiguas la ruta? Yo utilizaria alguna libreria de terceros que te permita seleccionar un fichero del arbol de directorios. Echa un vistazo en android arsenal, tienes un monton de FIle Choosers:

      https://android-arsenal.com/tag/35

      Por lo tanto el usuario selecciona el fichero, y la libreria te devolverá o bien la ruta, o bien un objeto de tipo File, o quizas un objeto de tipo Uri. En cualquier caso, puedes averiguar la ruta, y copiarlo.

      espero que te ayude!

Los comentarios están cerrados.

SUBSCRIBE TO NEWSLETTER
All rights reserved © Company Name, 2014
Dolor aliquet augue augue sit magnis, magna aenean aenean et! Et tempor, facilisis cursus turpis tempor odio, cursus montes ac turpis. Ultrices! Massa integer augue ridiculus adipiscing, massa cras pid. Turpis placerat scelerisque, vut odio mus non, mattis porttitor, nunc odio, turpis tortor sit? Pid amet, sed facilisis.
  • Goblinus globalus fantumo tandempo
  • Scelerisque cursus dignissim donus
  • Montes vutario lacus quis arcupolisio
  • Leftomato denitro oculus tepircos den
  • Spiratio dodenus christmas popupius
  • Afrenius globalus spiritum tandempo
  • Fitatos vutario lacus quis arcup delis
SUBSCRIBE NOW!
Receive messages whit news about Smart Thermostat
  We will not share your details with any 3rd party.
¡SUSCRÍBETE AHORA!
Recibe en tu correo las novedades del proyecto Termostato Inteligente
  Tus datos no serán compartidos con terceros.