Integración de SQLite en Aplicaciones IONIC con Capacitor

Hola a todos, hoy os voy a explicar como podemos conectar sqlite con IONIC.

En IONIC podemos usar sqlite que nos permite hacer bases de datos locales, esto en móviles es muy útil, ya que nos permite gestionar de forma fácil y local datos de forma rápida, algo que en un móvil es muy necesario.

Crear proyecto IONIC

Primero, debemos crear nuestro proyecto IONIC, tenemos un tutorial aquí:

IONIC 7 – Guía sobre como crear tu primera aplicación

Instalar sqlite en IONIC

Después, necesitamos instalar la dependencia sqlite oficial de IONIC, este es el repositorio oficial.

Te recomiendo instalar @capacitor/preferences y @capacitor/device

Esto no es necesario pero en el fichero capacitor.config.json podemos personalizar la base de datos sqlite:

Ejecutar sql en el navegador

Antes de seguir, para probar en web debemos hacer algunas cosas más, ya que sqlite no se puede ejecutar en un navegador pero si lo podemos adaptar con indexDB.

Vamos a node_modules/sql.js/dist y copiamos el fichero sql-wasm.wasm a nuestra carpeta assets. Esto es necesario, ya que será quien ejecutará las peticiones sql que hagamos en web.

IMPORTANTE

: sino lo copias, más adelante te saldrá un error indicando que lo necesitas.

Preparando sqlite en web con jeep-sqlite

A continuación, debemos instalar jeep-sqlite, que es un componente que nos permite utilizar sqlite en el navegador, solo debe ser ejecutado cuando estemos en modo web.

Después, vamos al app.module y añadimos las siguientes lineas antes de ngModule

Y en el modulo debemos añadir la propiedad schemas:

Ese CUSTOM_ELEMENTS_SCHEMA viene de @angular/core

Asi se quedaria:

Posteriormente, en el app.component.html, colocaremos el componente jeep-sqlite. Crearemos un par de atributos (load y isWeb).

Seguidamente, en el app.component.ts, necesitaremos indicar cuando estamos en modo web.

Esto lo haremos cuando nuestro dispositivo este listo y podamos acceder a su información usando el plugin Device de Capacitor.

Servicio SQLITE

Ahora, nos crearemos un servicio llamado llamado sqlite.service.ts.

En este servicio, comprobaremos si la base de datos esta creada o si debemos crear la base de datos, indicando desde app.component que la base de datos esta preparada.

Tendremos 4 atributos:

  • dbReady: Observable uqe nos indicará si la base de datos esta preparada.
  • isWeb: Indica si estamos en modo web o no. Cuando es web debemos almacenarlo de forma diferente.
  • isIOS: Indica si estamos usando un IOS o no. Servirá cuando hagamos el CRUD.
  • dbName: Indica el nombre de la base de datos que estamos usando.

Tendremos varios métodos:

  • init: según la plataforma usada, realizaremos una acción u otra.
  • setupDatabase: comprobamos si debemos crear la base de datos o recuperarla.
  • downloadDatabase: en el caso de que tengamos que sea la primera vez que tengamos que crear la base de datos, la descargaremos del fichero assets/db.json, este fichero contiene la información de la base de datos.
  • getDbName: Obtiene el nombre de la base de datos que estamos usando.

Ejemplo del contenido de db.json

Método init del servicio SQLITE

Obtenemos la info del dispositivo y una variable sqlite para almacenar CapacitorSQLite, esto se debe a que tenemos que llamar algunos métodos que no están «oficialmente», esto es probable que lo cambien en un futuro no muy lejano. Al final, comprobaremos si la base de datos se ha iniciado o no. Según el tipo de plataforma, realizaremos diferentes acciones:

    • android: pedimos permisos al usuario.
    • web: en modo web, necesitamos iniciar la webstore.
    • IOS: ponemos el atributo isIOS a true, lo usaremos al hacer el CRUD.

Método setupDatabase del servicio SQLITE

Comprobamos si hemos creado la base de datos, comprobando el valor de la clave first_setup_key, si no se ha iniciado la base de datos la crearemos, sino simplemente creamos la conexión, la abrimos e indicamos que la base de datos esta lista.

Método downloadDatabase del servicio SQLITE

Realizaremos el siguiente proceso:

  1. Obtenemos el fichero db.json.,
  2. Comprobamos si es valido.
  3. Si es valido lo importamos.
  4. Creamos la conexión.
  5. Abrimos la conexión.
  6. Indicamos en el valor de la clave first_setup_key a 1 para la próxima vez que iniciemos la app.
  7. Guardamos el nombre de la base de datos en el valor de la clave dbname.
  8. Indicamos que la base de datos esta lista.

Método getDbName del servicio SQLITE

Obtenemos el nombre de la base de datos desde la clave dbname.

Ejemplo servicio completo

Volvemos al app.component.ts y estaremos pendiente de cuando esta la base de datos preparada.

Aquí os dejo el repositorio de Github.

Os dejo un video donde explicamos como conectar sqlite en IONIC, hasta el minuto 21:36.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

5 comentarios

  1. Isaac Jeremis Salazar Pineda

    Hola, excelente todo el material, me esta sirviendo bastante, pero tengo una duda con respecto al json de Sqlite, ¿cómo puedo colocar las constraints?.

    No encuentro aún la manera.

  2. marcelo escobar

    Hola, estoy tratando de seguir el tutorial para agregar sqlite pero el ionic 7.2 no puedo encontar «app.module.ts» , podras indicar como se puede hacer con esta nueva version de ionic. desde ya muchas gracias

  3. marcelo escobar

    hola tengo el proyecto realizado en ionic 7.2 usando react, pero no puedo seguir el tutorial ya que esta hecho para angular, quye tendria que modificar para que funcione. gracias

  4. Disco Duro de Roer Post author

    El tutorial esta en angular, en react no hay app.module.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539