1 00:00:02,100 --> 00:00:05,240 Así que vamos a sumergirnos en SQLite. Una vez más, obtuvimos 2 00:00:05,300 --> 00:00:11,100 un módulo compatible con expo que instalamos tal como instalamos también los otros módulos 3 00:00:11,130 --> 00:00:12,120 nativos 4 00:00:12,120 --> 00:00:18,570 y ahora solo algunas palabras rápidas sobre SQLite. SQLite es un sistema de base de datos que podría 5 00:00:18,570 --> 00:00:22,840 decir que está disponible tanto en iOS como en Android, por lo que puede 6 00:00:22,860 --> 00:00:30,240 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 7 00:00:30,570 --> 00:00:32,860 ejecutar consultas en esa base de datos. 8 00:00:32,940 --> 00:00:39,030 Ahora, no profundizaré en la sintaxis de SQL aquí porque obviamente este no es un curso 9 00:00:39,030 --> 00:00:41,730 de SQL, pero para aprender todo sobre 10 00:00:41,730 --> 00:00:50,880 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 11 00:00:50,880 --> 00:00:56,550 el paquete SQLite en una aplicación expo donde puede ver más ejemplos de cómo eliminar 12 00:00:56,550 --> 00:01:02,460 cosas, etc. y también encontrará una referencia SQL para SQLite donde puede obtener más información sobre 13 00:01:02,460 --> 00:01:03,990 la sintaxis SQL. 14 00:01:03,990 --> 00:01:06,630 Ahora mostraré una sintaxis básica en este 15 00:01:06,720 --> 00:01:10,360 módulo, pero para todas las cosas que puede hacer en sus consultas, 16 00:01:10,470 --> 00:01:17,170 para todos los comandos que puede ejecutar, definitivamente revise estos recursos. Ahora con eso, agreguemos SQLite ejecutando expo install expo-sqlite 17 00:01:17,170 --> 00:01:24,010 en nuestro proyecto, que instalará esto en nuestro proyecto aquí y funcionará de la misma manera que antes, 18 00:01:24,010 --> 00:01:27,250 no se necesita configuración adicional y una 19 00:01:28,510 --> 00:01:32,720 vez que finalice esta instalación, podemos comience a trabajar con SQLite. 20 00:01:32,830 --> 00:01:35,750 Ahora, trabajar con la base de datos implica un par de 21 00:01:35,770 --> 00:01:41,020 cosas, por ejemplo, debe abrir una conexión a la base de datos y, si aún no existe una base de datos, 22 00:01:41,020 --> 00:01:46,260 que es el caso cuando accede por primera vez durante la vida útil de su aplicación, también creará esa base 23 00:01:46,450 --> 00:01:51,070 de datos y después de tener esa conexión con esa base de datos creada, por supuesto, puede ejecutar 24 00:01:51,070 --> 00:01:52,090 consultas en ella. 25 00:01:52,090 --> 00:01:57,310 Entonces, para eso, en realidad agregaré una carpeta de ayuda con un db. archivo js allí que no necesita hacer, pero 26 00:01:57,310 --> 00:02:03,220 quiero tener la lógica de mi base de datos allí para mantener mis otros archivos ajustados y tener un archivo 27 00:02:03,220 --> 00:02:10,210 donde podamos ver toda la lógica de la base de datos. Ahora, podemos importar SQLite desde el paquete y, como puede ver, la 28 00:02:10,290 --> 00:02:13,810 sintaxis de importación ahora es un poco diferente a la de los otros paquetes. 29 00:02:13,980 --> 00:02:19,320 En lugar de importar star como SQLite desde este paquete, lo instalamos aquí con esta sintaxis de importación 30 00:02:19,320 --> 00:02:20,300 nombrada, aparte 31 00:02:20,310 --> 00:02:22,180 de eso, sigue siendo muy similar 32 00:02:22,500 --> 00:02:25,110 y ahora podemos comenzar a usar ese paquete aquí. 33 00:02:25,260 --> 00:02:31,080 Ahora, en primer lugar, crearé una constante db que contiene una referencia a mi base de datos que obtengo al ejecutar 34 00:02:31,080 --> 00:02:34,290 la base de datos abierta SQLite y allí pasamos un nombre 35 00:02:34,290 --> 00:02:39,020 de base de datos que podría ser lugares. db. 36 00:02:39,060 --> 00:02:43,980 Ahora, lo que esto hará es que se conectará a esta base de datos o creará la base de datos si no puede 37 00:02:44,010 --> 00:02:48,990 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 38 00:02:49,080 --> 00:02:50,370 datos, eso es muy trivial 39 00:02:50,380 --> 00:02:55,110 Ahora, esta línea de código se ejecutará cada vez que ejecutemos este archivo, lo que efectivamente sucede cuando 40 00:02:55,170 --> 00:02:57,870 importamos este archivo por primera vez en cualquier lugar. 41 00:02:57,990 --> 00:03:04,320 Ahora también quiero agregar una función init aquí almacenada en una constante que hago para inicializar esta 42 00:03:04,320 --> 00:03:08,890 base de datos y exportaré esta función como una exportación con nombre. 43 00:03:08,910 --> 00:03:15,300 Ahora en esta función, quiero asegurarme de que creamos una tabla básica porque las bases de datos SQL funcionan con 44 00:03:15,300 --> 00:03:21,450 tablas que contienen sus registros y los registros son básicamente las filas de datos que agrega a su tabla. 45 00:03:21,450 --> 00:03:27,420 Ahora, inicialmente, cuando creamos la base de datos, está vacía, pero para almacenar lugares, necesitamos una tabla 46 00:03:27,420 --> 00:03:29,200 que pueda contener estos lugares. 47 00:03:29,220 --> 00:03:35,190 Entonces, quiero tener una función de inicialización aquí que realmente creará esa tabla si aún no 48 00:03:35,190 --> 00:03:35,900 existe. 49 00:03:36,690 --> 00:03:44,780 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 50 00:03:44,790 --> 00:03:50,220 SQLite en la base de datos y, por supuesto, encontrará todo eso en los documentos 51 00:03:50,220 --> 00:03:51,560 oficiales, y este 52 00:03:51,780 --> 00:03:57,570 método de transacción toma una función como argumento que le da acceso al objeto de 53 00:03:57,660 --> 00:03:59,620 transacción que crea para usted. 54 00:03:59,750 --> 00:04:06,870 El concepto de transacciones simplemente es un concepto en el que este paquete al final garantiza que su consulta siempre se 55 00:04:06,870 --> 00:04:13,200 ejecute como un todo y que si alguna parte de la consulta falla, la consulta completa se revierte 56 00:04:13,200 --> 00:04:17,340 para que no pueda terminar con datos corruptos en su base 57 00:04:17,340 --> 00:04:21,670 de datos, es por eso que realmente envuelve cada consulta en dicha transacción. 58 00:04:21,750 --> 00:04:26,760 Entonces, esto crea una transacción o inicializa una transacción y luego le da acceso a este 59 00:04:26,790 --> 00:04:30,830 objeto de transacción aquí en esta función que se ejecutará por usted. 60 00:04:30,840 --> 00:04:37,890 Entonces, aquí, ahora podemos usar este objeto de transacción para ejecutar una consulta SQL con la 61 00:04:37,890 --> 00:04:39,450 ayuda del método 62 00:04:39,450 --> 00:04:48,260 de ejecución SQL, nuevamente eso también está documentado aquí. Entonces ejecutar SQL ahora toma una cadena que describe su consulta SQL y 63 00:04:48,530 --> 00:04:52,500 esa es la parte en la que puede sumergirse en 64 00:04:52,520 --> 00:04:57,450 ese documento SQL que mencioné anteriormente, donde puede aprender todo sobre el lenguaje SQL. 65 00:04:57,560 --> 00:05:02,840 Ahora quiero crear una tabla aquí, lo que hacemos con el comando crear tabla y 66 00:05:02,870 --> 00:05:03,980 no necesita escribir 67 00:05:03,980 --> 00:05:11,600 esto en mayúsculas, solo hago esto para dejar en claro que estos son comandos estándar integrados en el lenguaje SQL y quiero 68 00:05:11,600 --> 00:05:12,590 crear la 69 00:05:12,590 --> 00:05:19,130 tabla si no existe, lo que hacemos con la restricción si no existe aquí y ahora el nombre de 70 00:05:19,130 --> 00:05:20,750 la tabla será lugares, 71 00:05:20,750 --> 00:05:23,300 minúsculas, ahora es mi propia dinámica aquí, 72 00:05:23,360 --> 00:05:28,760 quiero nombrar lugares y ahora entre entre paréntesis, configura lo que hay en la tabla y 73 00:05:28,760 --> 00:05:31,110 luego, puede agregar un punto y coma. 74 00:05:31,130 --> 00:05:35,420 Así que ahora definimos los diferentes campos que queremos tener en esa tabla, las diferentes 75 00:05:35,450 --> 00:05:42,380 columnas, por así decirlo, y quiero tener una columna de ID y la configuraré para que sea de tipo entero, que es uno 76 00:05:42,380 --> 00:05:44,660 de los tipos de datos admitidos 77 00:05:44,660 --> 00:05:50,360 en SQL y será una clave principal, lo que significa que también se verá obligado a ser único, no 78 00:05:50,360 --> 00:05:55,400 puede tener la misma ID dos veces allí y generará automáticamente esa ID para usted, lo cual 79 00:05:55,400 --> 00:05:57,880 es muy conveniente y no debe ser nulo, 80 00:05:57,890 --> 00:06:03,680 por lo que agregar No se permitirá un valor vacío. Ahora con una coma, podemos agregar 81 00:06:03,680 --> 00:06:08,030 la siguiente columna que queremos tener y ese será mi título. 82 00:06:08,030 --> 00:06:14,460 Ahora el título debe ser de tipo texto y también puede agregar no nulo allí si lo desea, todos mis 83 00:06:14,670 --> 00:06:17,200 datos no deberían ser nulos en realidad. 84 00:06:17,670 --> 00:06:22,860 Ahora, además del título, también quiero tener el imageUri almacenado allí y ese también es texto que 85 00:06:22,860 --> 00:06:24,110 no es nulo. 86 00:06:24,120 --> 00:06:28,950 Es texto, por supuesto, y no un archivo o algo así porque no estamos almacenando el 87 00:06:29,220 --> 00:06:34,020 archivo en la base de datos, estamos almacenando la ruta al archivo en la base 88 00:06:34,020 --> 00:06:40,530 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, 89 00:06:40,530 --> 00:06:47,760 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 90 00:06:47,760 --> 00:06:54,990 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 91 00:06:55,050 --> 00:06:56,330 todas son nulas. 92 00:06:56,340 --> 00:07:03,090 Ahora todavía no estamos buscando la ubicación, pero lo haremos más tarde y expresaremos una ubicación 93 00:07:03,090 --> 00:07:10,080 como una combinación de latitud y longitud, que es la forma estándar de expresar puntos en el mundo. 94 00:07:10,110 --> 00:07:14,150 Entonces, esto crea una tabla de este tipo si aún no existe. 95 00:07:14,150 --> 00:07:20,130 Ahora, el método de ejecución SQL también toma un segundo argumento, que es una matriz de argumentos que entrará en juego 96 00:07:20,130 --> 00:07:22,500 más adelante y que aún no necesitamos, 97 00:07:22,590 --> 00:07:26,850 estos serían argumentos dinámicos que puede inyectar en esta consulta, pero no necesitamos eso aquí 98 00:07:27,120 --> 00:07:33,810 y entonces tenemos dos funciones aquí como argumento número tres y cuatro. La primera función que pasamos es una función 99 00:07:33,810 --> 00:07:35,790 de éxito, esto se 100 00:07:36,000 --> 00:07:38,940 ejecuta si este comando tuvo éxito. 101 00:07:38,940 --> 00:07:43,140 El segundo argumento es una función de error que se ejecuta si esto falla. 102 00:07:43,200 --> 00:07:48,930 Ahora, por supuesto, el primer argumento para cada función aquí y estas funciones se ejecutan en su nombre por 103 00:07:48,930 --> 00:07:50,510 el paquete SQL, por 104 00:07:50,520 --> 00:07:54,990 lo que estas funciones siempre como primer argumento obtienen básicamente la consulta que ejecutó y 105 00:07:55,140 --> 00:07:59,490 al agregar un guión bajo como nombre aquí, señalo que No me importa esto, 106 00:07:59,490 --> 00:08:01,740 pero estoy interesado en el segundo argumento 107 00:08:01,740 --> 00:08:10,130 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. 108 00:08:10,170 --> 00:08:17,100 Así que aquí, crearé una promesa usando una nueva promesa, promesas integradas en Javascript y compatibles con la versión de Javascript que 109 00:08:17,100 --> 00:08:23,820 utiliza React Native y la promesa toma una función que toma una resolución y una función de rechazo como argumento y 110 00:08:23,910 --> 00:08:25,290 ahora podemos mover esta 111 00:08:25,800 --> 00:08:32,190 base de datos código de transacción allí y en el caso de éxito, llamo resolver, lo que significa que la 112 00:08:32,220 --> 00:08:37,200 promesa externa se resolverá, en el caso de error, llamo rechazar y reenviar mi error aquí 113 00:08:37,200 --> 00:08:41,220 y luego puedo devolver la promesa aquí en general en mi método 114 00:08:41,220 --> 00:08:47,400 init y ahora puedo llamar al método init desde otros lugares de la aplicación y recibo una promesa que se 115 00:08:47,400 --> 00:08:52,220 resolverá si tuvimos éxito al inicializar la base de datos, por lo tanto, al crear 116 00:08:52,230 --> 00:08:58,440 la tabla o si nos enfrentamos a un error. Por cierto, si no se crea una tabla porque ya 117 00:08:58,440 --> 00:09:06,680 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 118 00:09:06,680 --> 00:09:10,100 de datos, pero estamos configurando la base de datos. 119 00:09:10,100 --> 00:09:15,260 Así que ahora asegurémonos de llamar a init y, por supuesto, el lugar para llamarlo es la aplicación. js porque queremos inicializar 120 00:09:15,260 --> 00:09:18,060 la base de datos lo 121 00:09:18,140 --> 00:09:25,700 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 122 00:09:25,700 --> 00:09:30,620 algo sorprendente, es la función y, por lo tanto, aquí cuando esta aplicación. El archivo js se ejecuta, cuando también 123 00:09:30,750 --> 00:09:37,550 inicializamos la tienda Redux y así sucesivamente, quiero llamar a init aquí y ahora init tiene éxito o no, así 124 00:09:37,550 --> 00:09:45,380 que por ahora solo agregaré un bloque donde digo la base de datos inicializada del registro de consola, así que ese es el 125 00:09:45,770 --> 00:09:46,520 caso 126 00:09:46,550 --> 00:09:54,200 de éxito o un bloque catch donde obtenemos un error potencial en el que fallé el inicio de sesión de la consola al 127 00:09:54,230 --> 00:10:03,610 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 128 00:10:04,000 --> 00:10:09,880 inicializada de registro que es la salida del iPhone y ahora que comenzó en Android, también 129 00:10:09,880 --> 00:10:11,920 lo verá allí para Android. 130 00:10:12,070 --> 00:10:18,610 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 131 00:10:18,610 --> 00:10:21,820 podamos insertar datos y luego, por supuesto, buscar datos.