Así que vamos a sumergirnos en SQLite. Una vez más, obtuvimos
un módulo compatible con expo que instalamos tal como instalamos también los otros módulos
nativos
y ahora solo algunas palabras rápidas sobre SQLite. SQLite es un sistema de base de datos que podría
decir que está disponible tanto en iOS como en Android, por lo que puede
configurar rápidamente dicha base de datos allí, será muy fácil con este módulo y luego podrá usar una sintaxis SQL, una sintaxis SQL básica para
ejecutar consultas en esa base de datos.
Ahora, no profundizaré en la sintaxis de SQL aquí porque obviamente este no es un curso
de SQL, pero para aprender todo sobre
cómo usar eso, obviamente revise los documentos oficiales y adjunto también encontrará un enlace con un fragmento más detallado que se sumerge sobre cómo usar
el paquete SQLite en una aplicación expo donde puede ver más ejemplos de cómo eliminar
cosas, etc. y también encontrará una referencia SQL para SQLite donde puede obtener más información sobre
la sintaxis SQL.
Ahora mostraré una sintaxis básica en este
módulo, pero para todas las cosas que puede hacer en sus consultas,
para todos los comandos que puede ejecutar, definitivamente revise estos recursos. Ahora con eso, agreguemos SQLite ejecutando expo install expo-sqlite
en nuestro proyecto, que instalará esto en nuestro proyecto aquí y funcionará de la misma manera que antes,
no se necesita configuración adicional y una
vez que finalice esta instalación, podemos comience a trabajar con SQLite.
Ahora, trabajar con la base de datos implica un par de
cosas, por ejemplo, debe abrir una conexión a la base de datos y, si aún no existe una base de datos,
que es el caso cuando accede por primera vez durante la vida útil de su aplicación, también creará esa base
de datos y después de tener esa conexión con esa base de datos creada, por supuesto, puede ejecutar
consultas en ella.
Entonces, para eso, en realidad agregaré una carpeta de ayuda con un db. archivo js allí que no necesita hacer, pero
quiero tener la lógica de mi base de datos allí para mantener mis otros archivos ajustados y tener un archivo
donde podamos ver toda la lógica de la base de datos. Ahora, podemos importar SQLite desde el paquete y, como puede ver, la
sintaxis de importación ahora es un poco diferente a la de los otros paquetes.
En lugar de importar star como SQLite desde este paquete, lo instalamos aquí con esta sintaxis de importación
nombrada, aparte
de eso, sigue siendo muy similar
y ahora podemos comenzar a usar ese paquete aquí.
Ahora, en primer lugar, crearé una constante db que contiene una referencia a mi base de datos que obtengo al ejecutar
la base de datos abierta SQLite y allí pasamos un nombre
de base de datos que podría ser lugares. db.
Ahora, lo que esto hará es que se conectará a esta base de datos o creará la base de datos si no puede
encontrarla, por lo que cuando lanzamos la aplicación por primera vez y no necesita hacer nada más para obtener acceso a la base de
datos, eso es muy trivial
Ahora, esta línea de código se ejecutará cada vez que ejecutemos este archivo, lo que efectivamente sucede cuando
importamos este archivo por primera vez en cualquier lugar.
Ahora también quiero agregar una función init aquí almacenada en una constante que hago para inicializar esta
base de datos y exportaré esta función como una exportación con nombre.
Ahora en esta función, quiero asegurarme de que creamos una tabla básica porque las bases de datos SQL funcionan con
tablas que contienen sus registros y los registros son básicamente las filas de datos que agrega a su tabla.
Ahora, inicialmente, cuando creamos la base de datos, está vacía, pero para almacenar lugares, necesitamos una tabla
que pueda contener estos lugares.
Entonces, quiero tener una función de inicialización aquí que realmente creará esa tabla si aún no
existe.
Entonces, puedo usar mi constante db que apunta a esa base de datos y ejecutar la transacción. Ahora la transacción es un método ofrecido por el paquete
SQLite en la base de datos y, por supuesto, encontrará todo eso en los documentos
oficiales, y este
método de transacción toma una función como argumento que le da acceso al objeto de
transacción que crea para usted.
El concepto de transacciones simplemente es un concepto en el que este paquete al final garantiza que su consulta siempre se
ejecute como un todo y que si alguna parte de la consulta falla, la consulta completa se revierte
para que no pueda terminar con datos corruptos en su base
de datos, es por eso que realmente envuelve cada consulta en dicha transacción.
Entonces, esto crea una transacción o inicializa una transacción y luego le da acceso a este
objeto de transacción aquí en esta función que se ejecutará por usted.
Entonces, aquí, ahora podemos usar este objeto de transacción para ejecutar una consulta SQL con la
ayuda del método
de ejecución SQL, nuevamente eso también está documentado aquí. Entonces ejecutar SQL ahora toma una cadena que describe su consulta SQL y
esa es la parte en la que puede sumergirse en
ese documento SQL que mencioné anteriormente, donde puede aprender todo sobre el lenguaje SQL.
Ahora quiero crear una tabla aquí, lo que hacemos con el comando crear tabla y
no necesita escribir
esto en mayúsculas, solo hago esto para dejar en claro que estos son comandos estándar integrados en el lenguaje SQL y quiero
crear la
tabla si no existe, lo que hacemos con la restricción si no existe aquí y ahora el nombre de
la tabla será lugares,
minúsculas, ahora es mi propia dinámica aquí,
quiero nombrar lugares y ahora entre entre paréntesis, configura lo que hay en la tabla y
luego, puede agregar un punto y coma.
Así que ahora definimos los diferentes campos que queremos tener en esa tabla, las diferentes
columnas, por así decirlo, y quiero tener una columna de ID y la configuraré para que sea de tipo entero, que es uno
de los tipos de datos admitidos
en SQL y será una clave principal, lo que significa que también se verá obligado a ser único, no
puede tener la misma ID dos veces allí y generará automáticamente esa ID para usted, lo cual
es muy conveniente y no debe ser nulo,
por lo que agregar No se permitirá un valor vacío. Ahora con una coma, podemos agregar
la siguiente columna que queremos tener y ese será mi título.
Ahora el título debe ser de tipo texto y también puede agregar no nulo allí si lo desea, todos mis
datos no deberían ser nulos en realidad.
Ahora, además del título, también quiero tener el imageUri almacenado allí y ese también es texto que
no es nulo.
Es texto, por supuesto, y no un archivo o algo así porque no estamos almacenando el
archivo en la base de datos, estamos almacenando la ruta al archivo en la base
de datos, que es una cadena y ahora algo más que necesitaremos más adelante, que También ya quiero configurar mi dirección,
que es un texto, que debería ser una cadena que describa la dirección del lugar y un campo de latitud o simplemente lat, que
es real, que es un número de coma flotante al final y el longitud aquí abreviada con lng, que también es real y no
todas son nulas.
Ahora todavía no estamos buscando la ubicación, pero lo haremos más tarde y expresaremos una ubicación
como una combinación de latitud y longitud, que es la forma estándar de expresar puntos en el mundo.
Entonces, esto crea una tabla de este tipo si aún no existe.
Ahora, el método de ejecución SQL también toma un segundo argumento, que es una matriz de argumentos que entrará en juego
más adelante y que aún no necesitamos,
estos serían argumentos dinámicos que puede inyectar en esta consulta, pero no necesitamos eso aquí
y entonces tenemos dos funciones aquí como argumento número tres y cuatro. La primera función que pasamos es una función
de éxito, esto se
ejecuta si este comando tuvo éxito.
El segundo argumento es una función de error que se ejecuta si esto falla.
Ahora, por supuesto, el primer argumento para cada función aquí y estas funciones se ejecutan en su nombre por
el paquete SQL, por
lo que estas funciones siempre como primer argumento obtienen básicamente la consulta que ejecutó y
al agregar un guión bajo como nombre aquí, señalo que No me importa esto,
pero estoy interesado en el segundo argumento
y aquí, este sería mi objeto de error y ahora para que esto sea utilizable de una manera fácil, en realidad lo envolveré en una promesa personalizada.
Así que aquí, crearé una promesa usando una nueva promesa, promesas integradas en Javascript y compatibles con la versión de Javascript que
utiliza React Native y la promesa toma una función que toma una resolución y una función de rechazo como argumento y
ahora podemos mover esta
base de datos código de transacción allí y en el caso de éxito, llamo resolver, lo que significa que la
promesa externa se resolverá, en el caso de error, llamo rechazar y reenviar mi error aquí
y luego puedo devolver la promesa aquí en general en mi método
init y ahora puedo llamar al método init desde otros lugares de la aplicación y recibo una promesa que se
resolverá si tuvimos éxito al inicializar la base de datos, por lo tanto, al crear
la tabla o si nos enfrentamos a un error. Por cierto, si no se crea una tabla porque ya
existe, no obtendremos un error, pero aún así terminaremos en un caso de éxito. Entonces, con esto, todavía no estamos almacenando nada en la base
de datos, pero estamos configurando la base de datos.
Así que ahora asegurémonos de llamar a init y, por supuesto, el lugar para llamarlo es la aplicación. js porque queremos inicializar
la base de datos lo
antes posible cuando se inicia nuestra aplicación. Entonces importaré algo de mi carpeta de ayuda allí, del archivo de la base de datos allí y eso es
algo sorprendente, es la función y, por lo tanto, aquí cuando esta aplicación. El archivo js se ejecuta, cuando también
inicializamos la tienda Redux y así sucesivamente, quiero llamar a init aquí y ahora init tiene éxito o no, así
que por ahora solo agregaré un bloque donde digo la base de datos inicializada del registro de consola, así que ese es el
caso
de éxito o un bloque catch donde obtenemos un error potencial en el que fallé el inicio de sesión de la consola al
inicializar db y donde también también logré el error de error de la consola. Y si ahora guardamos esto, debería ver aquí en la base de datos
inicializada de registro que es la salida del iPhone y ahora que comenzó en Android, también
lo verá allí para Android.
Entonces eso funciona y ahora tenemos una base de datos inicializada, ahora también agregamos más métodos para asegurarnos de que también
podamos insertar datos y luego, por supuesto, buscar datos.