1 00:00:02,100 --> 00:00:05,240 Quindi tuffiamoci in SQLite. Ancora una volta abbiamo 2 00:00:05,300 --> 00:00:11,100 ottenuto un modulo per quello supportato da expo che installiamo proprio come abbiamo installato anche gli 3 00:00:11,130 --> 00:00:12,120 altri moduli 4 00:00:12,120 --> 00:00:18,570 nativi e ora solo alcune brevi parole su SQLite. SQLite è un sistema di database che si può dire 5 00:00:18,570 --> 00:00:22,840 che è disponibile sia su iOS che su Android, quindi è possibile impostare rapidamente 6 00:00:22,860 --> 00:00:30,240 un database del genere lì, sarà super facile con questo modulo e sarà quindi possibile utilizzare una sintassi SQL, alcune sintassi SQL di base 7 00:00:30,570 --> 00:00:32,860 per eseguire query su quel database. 8 00:00:32,940 --> 00:00:39,030 Ora, non mi immergerò profondamente nella sintassi SQL qui perché questo ovviamente non è un corso SQL 9 00:00:39,030 --> 00:00:41,730 ma per imparare tutto su come usarlo, 10 00:00:41,730 --> 00:00:50,880 ovviamente dai un'occhiata ai documenti ufficiali e in allegato trovi anche un link con uno snippet più dettagliato che si tuffa su come usare il 11 00:00:50,880 --> 00:00:56,550 pacchetto SQLite in un'app expo in cui puoi vedere altri esempi su come eliminare cose 12 00:00:56,550 --> 00:01:02,460 e così via e troverai anche un riferimento SQL per SQLite dove puoi saperne di più 13 00:01:02,460 --> 00:01:03,990 sulla sintassi SQL. 14 00:01:03,990 --> 00:01:06,630 Mostrerò alcune sintassi di base ora in questo 15 00:01:06,720 --> 00:01:10,360 modulo ma per tutte le cose che puoi fare nelle tue query, per 16 00:01:10,470 --> 00:01:17,170 tutti i comandi che puoi eseguire, dai un'occhiata a queste risorse. Ora, aggiungiamo SQLite eseguendo expo install expo-sqlite nel 17 00:01:17,170 --> 00:01:24,010 nostro progetto che installerà questo nel nostro progetto qui e funzionerà immediatamente come prima, non è 18 00:01:24,010 --> 00:01:27,250 necessaria alcuna configurazione aggiuntiva e una 19 00:01:28,510 --> 00:01:32,720 volta terminata l'installazione, possiamo inizia a lavorare con SQLite. 20 00:01:32,830 --> 00:01:35,750 Ora lavorare con il database comporta un paio di 21 00:01:35,770 --> 00:01:41,020 cose, ad esempio è necessario aprire una connessione al database e se non esiste ancora un database, come 22 00:01:41,020 --> 00:01:46,260 nel caso in cui si accede per la prima volta durante la vita dell'app, verrà creato anche quel 23 00:01:46,450 --> 00:01:51,070 database e dopo che hai quella connessione a quel database creato, puoi ovviamente eseguire query 24 00:01:51,070 --> 00:01:52,090 contro di esso. 25 00:01:52,090 --> 00:01:57,310 Quindi, per quello, aggiungerò effettivamente una cartella di helper con un db. file js lì dentro che non è necessario 26 00:01:57,310 --> 00:02:03,220 fare ma voglio avere la mia logica di database lì dentro per mantenere gli altri miei file snelli e in modo 27 00:02:03,220 --> 00:02:10,210 che io abbia un file dove possiamo vedere tutta la logica del database. Ora lì dentro, possiamo importare SQLite dal pacchetto e come vedi, 28 00:02:10,290 --> 00:02:13,810 la sintassi di importazione ora è un po 'diversa rispetto agli altri pacchetti. 29 00:02:13,980 --> 00:02:19,320 Invece di importare stelle come SQLite da questo pacchetto, lo installiamo qui con questa sintassi di importazione 30 00:02:19,320 --> 00:02:20,300 denominata, a 31 00:02:20,310 --> 00:02:22,180 parte questo, è ancora molto simile 32 00:02:22,500 --> 00:02:25,110 e ora possiamo iniziare a utilizzare quel pacchetto qui. 33 00:02:25,260 --> 00:02:31,080 Ora, prima di tutto, creerò una costante db che contiene un riferimento al mio database che ottengo 34 00:02:31,080 --> 00:02:34,290 eseguendo il database aperto SQLite e lì passiamo un nome 35 00:02:34,290 --> 00:02:39,020 di database che potrebbe essere posto. db. 36 00:02:39,060 --> 00:02:43,980 Ora ciò che farà è che si collegherà a questo database o creerà il database se non lo trova, 37 00:02:44,010 --> 00:02:48,990 quindi quando abbiamo lanciato l'app per la prima volta e non è necessario fare nient'altro per accedere al database, quindi 38 00:02:49,080 --> 00:02:50,370 questo è molto banale. 39 00:02:50,380 --> 00:02:55,110 Ora questa riga di codice verrà eseguita ogni volta che eseguiamo questo file che si verifica effettivamente 40 00:02:55,170 --> 00:02:57,870 quando importiamo questo file per la prima volta ovunque. 41 00:02:57,990 --> 00:03:04,320 Ora voglio anche aggiungere una funzione init qui memorizzata in una costante che faccio per 42 00:03:04,320 --> 00:03:08,890 inizializzare questo database ed esporterò questa funzione come esportazione denominata. 43 00:03:08,910 --> 00:03:15,300 Ora in questa funzione, voglio assicurarmi di creare una tabella di base perché i database SQL funzionano con tabelle che 44 00:03:15,300 --> 00:03:21,450 contengono i tuoi record e i record sono fondamentalmente le righe di dati che aggiungi alla tua tabella. 45 00:03:21,450 --> 00:03:27,420 Ora inizialmente quando creiamo il database, è vuoto ma per memorizzare i luoghi, abbiamo bisogno di una tabella in 46 00:03:27,420 --> 00:03:29,200 grado di contenere questi posti. 47 00:03:29,220 --> 00:03:35,190 Quindi voglio avere una funzione di inizializzazione qui che creerà effettivamente quella tabella se non esiste 48 00:03:35,190 --> 00:03:35,900 ancora. 49 00:03:36,690 --> 00:03:44,780 Quindi lì, posso usare la mia costante db che punta a quel database ed eseguire la transazione. Ora la transazione è un metodo offerto dal pacchetto 50 00:03:44,790 --> 00:03:50,220 SQLite sul database e ovviamente troverai tutto ciò nei documenti ufficiali e 51 00:03:50,220 --> 00:03:51,560 questo metodo 52 00:03:51,780 --> 00:03:57,570 di transazione assume una funzione come argomento che ti dà accesso all'oggetto di 53 00:03:57,660 --> 00:03:59,620 transazione che crea per te. 54 00:03:59,750 --> 00:04:06,870 Il concetto di transazioni è semplicemente un concetto in cui questo pacchetto alla fine garantisce quindi che la tua query sia 55 00:04:06,870 --> 00:04:13,200 sempre eseguita nel suo insieme e che se una parte della query dovesse fallire, l'intera query verrà ripristinata 56 00:04:13,200 --> 00:04:17,340 in modo da non poter finire con dati danneggiati nel tuo 57 00:04:17,340 --> 00:04:21,670 database, ecco perché in realtà avvolgi ogni query in una tale transazione. 58 00:04:21,750 --> 00:04:26,760 Quindi questo crea una transazione o inizializza una transazione e quindi ti dà accesso a questo 59 00:04:26,790 --> 00:04:30,830 oggetto di transazione qui in questa funzione che verrà eseguita per te. 60 00:04:30,840 --> 00:04:37,890 Quindi qui, ora possiamo usare questo oggetto di transazione per eseguire una query SQL 61 00:04:37,890 --> 00:04:39,450 con l'aiuto 62 00:04:39,450 --> 00:04:48,260 del metodo execute SQL, che è anche documentato qui. Quindi eseguire SQL ora prende una stringa che descrive la tua query SQL 63 00:04:48,530 --> 00:04:52,500 e questa è la parte in cui puoi immergerti in 64 00:04:52,520 --> 00:04:57,450 quel documento SQL che ho menzionato in precedenza dove puoi imparare tutto sul linguaggio SQL. 65 00:04:57,560 --> 00:05:02,840 Ora voglio creare una tabella qui che facciamo con il comando create table e non 66 00:05:02,870 --> 00:05:03,980 è necessario scriverlo 67 00:05:03,980 --> 00:05:11,600 in maiuscolo, lo faccio solo per chiarire che si tratta di comandi standard incorporati nel linguaggio SQL e voglio crea la tabella 68 00:05:11,600 --> 00:05:12,590 se non 69 00:05:12,590 --> 00:05:19,130 esiste, cosa che facciamo con la restrizione se non esiste qui e ora il nome della tabella sarà posti, 70 00:05:19,130 --> 00:05:20,750 lettere minuscole, ora è 71 00:05:20,750 --> 00:05:23,300 la mia cosa dinamica qui, giusto voglio 72 00:05:23,360 --> 00:05:28,760 nominarlo luoghi e ora tra tra parentesi, si configura ciò che è nella tabella e, successivamente, 73 00:05:28,760 --> 00:05:31,110 è possibile aggiungere un punto e virgola. 74 00:05:31,130 --> 00:05:35,420 Quindi ora definiamo i diversi campi che vogliamo avere in quella tabella, le 75 00:05:35,450 --> 00:05:42,380 diverse colonne per così dire e voglio avere una colonna ID e imposterò questo per essere di tipo intero che è 76 00:05:42,380 --> 00:05:44,660 uno dei tipi di dati supportati 77 00:05:44,660 --> 00:05:50,360 in SQL e sarà una chiave primaria, il che significa che sarà anche forzato a essere univoco, non 78 00:05:50,360 --> 00:05:55,400 puoi avere lo stesso ID due volte lì e genererà automaticamente quell'ID per te che 79 00:05:55,400 --> 00:05:57,880 è molto conveniente e non dovrebbe essere 80 00:05:57,890 --> 00:06:03,680 nullo, quindi aggiungendo un valore vuoto non sarà consentito. Ora con una virgola, possiamo aggiungere la 81 00:06:03,680 --> 00:06:08,030 colonna successiva che vogliamo avere e che sarà il mio titolo. 82 00:06:08,030 --> 00:06:14,460 Ora il titolo dovrebbe essere di tipo testo e puoi anche aggiungere non null lì se vuoi, tutti i miei 83 00:06:14,670 --> 00:06:17,200 dati non dovrebbero essere nulli in realtà. 84 00:06:17,670 --> 00:06:22,860 Ora oltre al titolo, voglio anche avere l'immagineUri memorizzata lì dentro e che è anche un testo 85 00:06:22,860 --> 00:06:24,110 che non è nullo. 86 00:06:24,120 --> 00:06:28,950 Ovviamente è un testo e non un file o qualcosa del genere perché non stiamo memorizzando 87 00:06:29,220 --> 00:06:34,020 il file nel database, stiamo memorizzando il percorso del file nel database che è una 88 00:06:34,020 --> 00:06:40,530 stringa e ora qualcos'altro avremo bisogno in seguito che Voglio già impostare anche il mio indirizzo che è un testo, che 89 00:06:40,530 --> 00:06:47,760 dovrebbe essere una stringa che descrive l'indirizzo del luogo e un campo di latitudine o solo lat che è un reale, che è 90 00:06:47,760 --> 00:06:54,990 un numero in virgola mobile alla fine e il la longitudine qui abbreviata con lng, che è anche un reale e questi non 91 00:06:55,050 --> 00:06:56,330 sono tutti nulli. 92 00:06:56,340 --> 00:07:03,090 Ora non stiamo ancora recuperando la posizione, ma lo faremo più tardi ed esprimeremo una posizione 93 00:07:03,090 --> 00:07:10,080 come una combinazione di latitudine e longitudine che è il modo standard di esprimere punti sul mondo. 94 00:07:10,110 --> 00:07:14,150 Quindi questo crea una tabella del genere ora se non esiste già. 95 00:07:14,150 --> 00:07:20,130 Ora il metodo execute SQL accetta anche un secondo argomento che è un array di argomenti che entreranno in gioco più 96 00:07:20,130 --> 00:07:22,500 tardi e che non abbiamo ancora bisogno, questi 97 00:07:22,590 --> 00:07:26,850 sarebbero argomenti dinamici che puoi iniettare in questa query ma non ne abbiamo bisogno qui 98 00:07:27,120 --> 00:07:33,810 e quindi abbiamo due funzioni qui come argomento numero tre e quattro. La prima funzione che passiamo è una funzione 99 00:07:33,810 --> 00:07:35,790 di successo, questa viene 100 00:07:36,000 --> 00:07:38,940 eseguita se questo comando ha avuto successo. 101 00:07:38,940 --> 00:07:43,140 Il secondo argomento è una funzione di errore che viene eseguita in caso di errore. 102 00:07:43,200 --> 00:07:48,930 Ora il primo argomento per ciascuna funzione qui e queste funzioni sono eseguite per tuo conto dal 103 00:07:48,930 --> 00:07:50,510 pacchetto SQL ovviamente, quindi 104 00:07:50,520 --> 00:07:54,990 queste funzioni sempre come primo argomento ottengono sostanzialmente la query che hai eseguito 105 00:07:55,140 --> 00:07:59,490 e aggiungendo un carattere di sottolineatura come nome qui, segnalo che Non 106 00:07:59,490 --> 00:08:01,740 mi interessa, ma sono interessato al 107 00:08:01,740 --> 00:08:10,130 secondo argomento e qui, questo sarebbe il mio oggetto di errore e ora per renderlo utilizzabile in modo semplice, lo avvolgerò in una promessa personalizzata. 108 00:08:10,170 --> 00:08:17,100 Quindi, qui, creerò una promessa usando una nuova promessa, promesse integrate in Javascript e supportate dalla versione Javascript che React 109 00:08:17,100 --> 00:08:23,820 Native usa e la promessa assume una funzione che accetta una risoluzione e una funzione di rifiuto come argomento 110 00:08:23,910 --> 00:08:25,290 e ora possiamo 111 00:08:25,800 --> 00:08:32,190 spostare questo database codice di transazione lì dentro e in caso di successo, chiamo resol, il che significa 112 00:08:32,220 --> 00:08:37,200 che la promessa esterna verrà risolta, nel caso di errore, chiamo rifiuto e inoltro 113 00:08:37,200 --> 00:08:41,220 il mio errore qui e quindi posso restituire la promessa qui 114 00:08:41,220 --> 00:08:47,400 nel mio metodo init e ora posso chiamare il metodo init da altre posizioni nell'app e ricevo 115 00:08:47,400 --> 00:08:52,220 una promessa che risolverà se siamo riusciti a inizializzare il database, quindi a creare 116 00:08:52,230 --> 00:08:58,440 la tabella o se abbiamo riscontrato un errore. A proposito, se non viene creata alcuna tabella perché 117 00:08:58,440 --> 00:09:06,680 esiste già, non avremo un errore ma finiremo comunque in un caso di successo. Quindi, con questo, non stiamo ancora memorizzando nulla nel 118 00:09:06,680 --> 00:09:10,100 database ma stiamo configurando il database. 119 00:09:10,100 --> 00:09:15,260 Quindi ora assicuriamoci di chiamare init e ovviamente il posto per chiamarla è l'app. js file perché 120 00:09:15,260 --> 00:09:18,060 vogliamo inizializzare il database il 121 00:09:18,140 --> 00:09:25,700 prima possibile all'avvio della nostra app. Importerò quindi qualcosa dalla mia cartella degli helper lì, dal file del database lì dentro e questo è qualcosa 122 00:09:25,700 --> 00:09:30,620 di sorprendente che è la funzione e quindi qui quando questa app. Il file js viene eseguito, quando inizializziamo 123 00:09:30,750 --> 00:09:37,550 anche l'archivio Redux e così via, voglio chiamare init qui e ora init ha esito positivo o no, quindi 124 00:09:37,550 --> 00:09:45,380 per ora aggiungerò solo un blocco quindi dove dico che il database della console è stato inizializzato, quindi questo è il caso 125 00:09:45,770 --> 00:09:46,520 di 126 00:09:46,550 --> 00:09:54,200 successo o un blocco catch in cui si verifica un potenziale errore in cui il log della console inizializza il db 127 00:09:54,230 --> 00:10:03,610 non è riuscito e in cui quindi si registra anche l'errore della console. E se ora lo salviamo, dovresti vedere qui nel database di log 128 00:10:04,000 --> 00:10:09,880 inizializzato che è l'output da iPhone e ora che è stato avviato su Android, lo 129 00:10:09,880 --> 00:10:11,920 vedi anche per Android. 130 00:10:12,070 --> 00:10:18,610 In modo che funzioni e ora abbiamo inizializzato un database, è ora di aggiungere anche altri metodi per assicurarci di poter anche 131 00:10:18,610 --> 00:10:21,820 inserire i dati e, in seguito, ovviamente, recuperare i dati.