SQLiteOpenHelper en Android: guía CRUD con SQLite local
Este tutorial explica cómo una app Android puede guardar datos estructurados en el dispositivo con SQLiteOpenHelper. El ejemplo utiliza una lista de la compra, pero el patrón sirve también para notas, catálogos offline, formularios locales y pequeños conjuntos de datos que pertenecen al móvil antes que a un backend remoto.
Qué cubre este ejemplo
- Crear y abrir una base de datos SQLite desde código Android.
- Distinguir entre acceso de lectura y escritura con
getReadableDatabase()ygetWritableDatabase(). - Implementar operaciones de crear, leer, actualizar y borrar en un modelo pequeño.
- Entender cuándo conviene una base local y cuándo es mejor apoyarse en una API.
Si estás siguiendo la serie móvil completa, este artículo conecta con los primeros pasos en Android y con la guía de almacenamiento local en iOS.
1.Objetivos
Los objetivos de esta ejercicio son que el lector aprenda a:- Ser capaz de diseñar una aplicación móvil.
- Saber implementar varias funcionalidades en una aplicación Android:
- Persistencia de datos.
- Gestión de ficheros y carpetas.
- Integración de funcionalidades del API multimedia.
- Menú de la aplicación.
- Captura de acontecimientos.
- Gestión de notificaciones.
Ejercicio
Github: El objetivo de este ejercicio es aprender cómo funciona la persistencia de datos mediante la propia API de SQL que ofrece Android. Se ha creado un proyecto en GitHub para la realización de este ejercicio. Lo podéis descargar siguiendo los pasos del ejercicio 1 de la PEC 2 y utilizando la siguiente URL: Enlace GitHub Esta app consiste en emular una lista de la compra y mostrar los productos en una lista. Cómo veréis, la parte de visualización e interacción de usuario ya está hecho. Tareas a realizar:- Busca en la documentación oficial de Android donde se explica la persistencia de datos utilizando las herramientas SQL. Comparte el link. Documentación Oficial Storage Option
- Lee la documentación y responde las siguientes preguntas:
- ¿Para qué sirve la clase SQLiteOpenHelper? La clase SQLiteOpenHelper es una clase abstracta utilizada para gestionar bases de datos. Esta clase nos permite implementar un patrón de creación, apertura y actualización y su finalidad es abstraernos de la lógica subyacente a la decisión de crear o actualizar una base de datos de manera previa a que ésta deba ser abierta.
- ¿Qué métodos son necesarios para añadir información, leerla, borrarla y actualizarla? Escribir información getWritableDatabase() y para leerla getReadableDatabase(). Que ambos métodos conseguimos acceder a la base de datos y poder realizar tanto lecturas como escrituras.
- Una vez nos hemos familiarizado con la documentación, da un vistazo a cómo está estructurado el proyecto. Las tareas a hacer dentro de la aplicación son completar los métodos que encontraréis en la clase ShoppingItemDB.java. Cada método tiene una etiqueta TODO donde explica las tareas que se tienen que realizar (podéis buscarlos yendo a la pestaña izquierda inferior de Android Studio, junto a la de Android). https://github.com/al118345/Android1-PEC2-ShoppingList
Cuándo encaja SQLiteOpenHelper
SQLiteOpenHelper encaja cuando los datos son relacionales, caben en el dispositivo y deben seguir disponibles sin conexión. Es menos adecuado para datos colaborativos, información gobernada por servidor o conjuntos que necesitan reglas de sincronización entre muchos usuarios.
En proyectos Android modernos también conviene evaluar Room, que añade una capa de abstracción sobre SQLite. Aun así, aprender SQLiteOpenHelper ayuda a entender qué ocurre por debajo: apertura de base de datos, creación de tablas, migraciones y ejecución segura de sentencias SQL.
Como pensar las migraciones
La parte que suele crear problemas no es la primera version de la base de datos, sino la segunda o tercera version cuando ya existen usuarios con datos en el dispositivo. onUpgrade() debe tratarse como un plan de migracion: anadir columnas con cuidado, copiar datos cuando una tabla cambia de forma y probar la actualizacion desde cada version que todavia pueda existir en produccion.
En una lista de la compra, una version futura podria anadir categorias, cantidades o estado de sincronizacion. Son campos pequenos, pero cada cambio debe conservar los productos existentes. Una migracion destructiva puede valer en un ejercicio; rara vez es aceptable en una app personal donde la lista pertenece al usuario.
SQLiteOpenHelper frente a Room
Room suele ser mejor opcion en aplicaciones Android modernas porque aporta comprobaciones en compilacion, clases DAO y una API de migraciones mas clara. SQLiteOpenHelper sigue siendo util para aprender porque muestra el ciclo de vida de bajo nivel de la base de datos. Entenderlo ayuda despues a depurar problemas de rendimiento o migracion.
Lecturas relacionadas sobre almacenamiento móvil
Para comparar la persistencia Android con el ecosistema Apple puedes seguir con almacenamiento local en iOS. Si todavía estás montando las primeras pantallas, revisa también los fundamentos de una app Android.