Crear base de datos SQLite al instalar App Android

kesada7

Buenas me gustaría aprender a desarrollar aplicaciones Android de forma nativa en Java con Android Studio así que este finde empecé a crear una app "chorra" para ver como funcionaba las herramientas y hacer pruebas básicas y trastear un poco con Android Studio.

Estoy haciendo un "juego" de pokémon que hace algo así como simular la zona safari. Os dejo unas screen:

Tengo una base de datos con una tabla pokemon que contiene la info de cada pokemon como el nombre, ratio de captura, probabilidad de que huya etc. Y con esos datos hago una instancia de la clase Pokemon.

Bien pues tengo una duda que no se como se resuelve o se hace de forma optima ya que nunca he trabajado con app móviles. La cosa es que esa base de datos con sus tablas y metiendo todos los datos con insert los hago con código desde la ejecución de la app, de tal forma que siempre que abrimos la app se ejecuta todo, se vuelven a insertar todos los datos (imagina por ejemplo que quiero meter los datos de los primeros 150 pokemon, son muchos datos).

Entonces quisiera saber si hay alguna forma de que en el momento de instalar la aplicación en el móvil se instale una base de datos ya creada con sus tablas y los datos ya metidos, para luego usarla solo para extraer la información.

zoeshadow

No hay una manera "automática" de hacerlo, existe una clase https://github.com/codepath/android_guides/wiki/Local-Databases-with-SQLiteOpenHelper, que te ayuda con el tema de la creación/migración de tablas.

Básicamente lo que hace es llamarte al metodo onCreate o onUpgrade dependiendo si la base de datos ya existe o no en el dispositivo, con lo que te permitiría solo crearla la primera vez. ( esto se puede solucionar a mano guardando un flag o comprobando si existe antes de crearla )

Lo que hacen muchas aplicaciones es hacerlo la primera vez que inicias y ponen una pantalla de carga, de manera que en el momento en el que la app arranca ya lo tienes todo cargado.

También te recomendaría tener un fichero .sql con todos los datos y cargarlo al iniciar la app, posiblemente sea más fácil de mantener que tener las querys en código.

1 respuesta
kesada7

#2 Gracias por responder. Si lo de la clase SQLiteOpenHelper lo estuve mirando pero por lo que yo entendí se usa para lo que tú ya has dicho, ayudarte con el tema del manejo de la base de datos mediante código, pero yo lo que quería era instalar la base de datos ya creada o sea el "baseDatos.sql" al momento de instalar la app en tu móvil.

Para eso lo que he hecho al final es pues mi .sql ya creado en un gestor de sqlite yo he usado por ejemplo este: http://sqliteadmin.orbmu2k.de/ lo he importado en mi proyecto con los recursos y luego hago un copypatch a la carpeta data/data/.../database que es donde se crean las base de datos mediante código haciendo uso como tu bien decías de un flag para comprobar antes si ya existe y hacerlo solo la primera vez que abrimos la app. Tal vez era algo obvio pero es que ya digo que llevo 3 días usando Android y no tengo ni idea xD

1 respuesta
r2d2rigo

#3 mejor create una base de datos con toda la estructura y "virgen", la metes como recurso/archivo de contenido en el proyecto de la app y cuando arraque que haga una copia al storage local. Asi te ahorras tener que ir ejecutando el taco de instrucciones SQL y tal.

1 respuesta
kesada7

#4 Si, si eso es lo que he hecho. Tal vez no me he explicado bien pero era a eso lo que me refería. Tengo la .sql ya en los recursos del proyecto y cuando arranque hace una copia pero solo si no existe, para que la haga solo la primera vez, ya que la base de datos la uso luego para insertar datos en otras tablas.