Quindi tuffiamoci in SQLite. Ancora una volta abbiamo
ottenuto un modulo per quello supportato da expo che installiamo proprio come abbiamo installato anche gli
altri moduli
nativi e ora solo alcune brevi parole su SQLite. SQLite è un sistema di database che si può dire
che è disponibile sia su iOS che su Android, quindi è possibile impostare rapidamente
un database del genere lì, sarà super facile con questo modulo e sarà quindi possibile utilizzare una sintassi SQL, alcune sintassi SQL di base
per eseguire query su quel database.
Ora, non mi immergerò profondamente nella sintassi SQL qui perché questo ovviamente non è un corso SQL
ma per imparare tutto su come usarlo,
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
pacchetto SQLite in un'app expo in cui puoi vedere altri esempi su come eliminare cose
e così via e troverai anche un riferimento SQL per SQLite dove puoi saperne di più
sulla sintassi SQL.
Mostrerò alcune sintassi di base ora in questo
modulo ma per tutte le cose che puoi fare nelle tue query, per
tutti i comandi che puoi eseguire, dai un'occhiata a queste risorse. Ora, aggiungiamo SQLite eseguendo expo install expo-sqlite nel
nostro progetto che installerà questo nel nostro progetto qui e funzionerà immediatamente come prima, non è
necessaria alcuna configurazione aggiuntiva e una
volta terminata l'installazione, possiamo inizia a lavorare con SQLite.
Ora lavorare con il database comporta un paio di
cose, ad esempio è necessario aprire una connessione al database e se non esiste ancora un database, come
nel caso in cui si accede per la prima volta durante la vita dell'app, verrà creato anche quel
database e dopo che hai quella connessione a quel database creato, puoi ovviamente eseguire query
contro di esso.
Quindi, per quello, aggiungerò effettivamente una cartella di helper con un db. file js lì dentro che non è necessario
fare ma voglio avere la mia logica di database lì dentro per mantenere gli altri miei file snelli e in modo
che io abbia un file dove possiamo vedere tutta la logica del database. Ora lì dentro, possiamo importare SQLite dal pacchetto e come vedi,
la sintassi di importazione ora è un po 'diversa rispetto agli altri pacchetti.
Invece di importare stelle come SQLite da questo pacchetto, lo installiamo qui con questa sintassi di importazione
denominata, a
parte questo, è ancora molto simile
e ora possiamo iniziare a utilizzare quel pacchetto qui.
Ora, prima di tutto, creerò una costante db che contiene un riferimento al mio database che ottengo
eseguendo il database aperto SQLite e lì passiamo un nome
di database che potrebbe essere posto. db.
Ora ciò che farà è che si collegherà a questo database o creerà il database se non lo trova,
quindi quando abbiamo lanciato l'app per la prima volta e non è necessario fare nient'altro per accedere al database, quindi
questo è molto banale.
Ora questa riga di codice verrà eseguita ogni volta che eseguiamo questo file che si verifica effettivamente
quando importiamo questo file per la prima volta ovunque.
Ora voglio anche aggiungere una funzione init qui memorizzata in una costante che faccio per
inizializzare questo database ed esporterò questa funzione come esportazione denominata.
Ora in questa funzione, voglio assicurarmi di creare una tabella di base perché i database SQL funzionano con tabelle che
contengono i tuoi record e i record sono fondamentalmente le righe di dati che aggiungi alla tua tabella.
Ora inizialmente quando creiamo il database, è vuoto ma per memorizzare i luoghi, abbiamo bisogno di una tabella in
grado di contenere questi posti.
Quindi voglio avere una funzione di inizializzazione qui che creerà effettivamente quella tabella se non esiste
ancora.
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
SQLite sul database e ovviamente troverai tutto ciò nei documenti ufficiali e
questo metodo
di transazione assume una funzione come argomento che ti dà accesso all'oggetto di
transazione che crea per te.
Il concetto di transazioni è semplicemente un concetto in cui questo pacchetto alla fine garantisce quindi che la tua query sia
sempre eseguita nel suo insieme e che se una parte della query dovesse fallire, l'intera query verrà ripristinata
in modo da non poter finire con dati danneggiati nel tuo
database, ecco perché in realtà avvolgi ogni query in una tale transazione.
Quindi questo crea una transazione o inizializza una transazione e quindi ti dà accesso a questo
oggetto di transazione qui in questa funzione che verrà eseguita per te.
Quindi qui, ora possiamo usare questo oggetto di transazione per eseguire una query SQL
con l'aiuto
del metodo execute SQL, che è anche documentato qui. Quindi eseguire SQL ora prende una stringa che descrive la tua query SQL
e questa è la parte in cui puoi immergerti in
quel documento SQL che ho menzionato in precedenza dove puoi imparare tutto sul linguaggio SQL.
Ora voglio creare una tabella qui che facciamo con il comando create table e non
è necessario scriverlo
in maiuscolo, lo faccio solo per chiarire che si tratta di comandi standard incorporati nel linguaggio SQL e voglio crea la tabella
se non
esiste, cosa che facciamo con la restrizione se non esiste qui e ora il nome della tabella sarà posti,
lettere minuscole, ora è
la mia cosa dinamica qui, giusto voglio
nominarlo luoghi e ora tra tra parentesi, si configura ciò che è nella tabella e, successivamente,
è possibile aggiungere un punto e virgola.
Quindi ora definiamo i diversi campi che vogliamo avere in quella tabella, le
diverse colonne per così dire e voglio avere una colonna ID e imposterò questo per essere di tipo intero che è
uno dei tipi di dati supportati
in SQL e sarà una chiave primaria, il che significa che sarà anche forzato a essere univoco, non
puoi avere lo stesso ID due volte lì e genererà automaticamente quell'ID per te che
è molto conveniente e non dovrebbe essere
nullo, quindi aggiungendo un valore vuoto non sarà consentito. Ora con una virgola, possiamo aggiungere la
colonna successiva che vogliamo avere e che sarà il mio titolo.
Ora il titolo dovrebbe essere di tipo testo e puoi anche aggiungere non null lì se vuoi, tutti i miei
dati non dovrebbero essere nulli in realtà.
Ora oltre al titolo, voglio anche avere l'immagineUri memorizzata lì dentro e che è anche un testo
che non è nullo.
Ovviamente è un testo e non un file o qualcosa del genere perché non stiamo memorizzando
il file nel database, stiamo memorizzando il percorso del file nel database che è una
stringa e ora qualcos'altro avremo bisogno in seguito che Voglio già impostare anche il mio indirizzo che è un testo, che
dovrebbe essere una stringa che descrive l'indirizzo del luogo e un campo di latitudine o solo lat che è un reale, che è
un numero in virgola mobile alla fine e il la longitudine qui abbreviata con lng, che è anche un reale e questi non
sono tutti nulli.
Ora non stiamo ancora recuperando la posizione, ma lo faremo più tardi ed esprimeremo una posizione
come una combinazione di latitudine e longitudine che è il modo standard di esprimere punti sul mondo.
Quindi questo crea una tabella del genere ora se non esiste già.
Ora il metodo execute SQL accetta anche un secondo argomento che è un array di argomenti che entreranno in gioco più
tardi e che non abbiamo ancora bisogno, questi
sarebbero argomenti dinamici che puoi iniettare in questa query ma non ne abbiamo bisogno qui
e quindi abbiamo due funzioni qui come argomento numero tre e quattro. La prima funzione che passiamo è una funzione
di successo, questa viene
eseguita se questo comando ha avuto successo.
Il secondo argomento è una funzione di errore che viene eseguita in caso di errore.
Ora il primo argomento per ciascuna funzione qui e queste funzioni sono eseguite per tuo conto dal
pacchetto SQL ovviamente, quindi
queste funzioni sempre come primo argomento ottengono sostanzialmente la query che hai eseguito
e aggiungendo un carattere di sottolineatura come nome qui, segnalo che Non
mi interessa, ma sono interessato al
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.
Quindi, qui, creerò una promessa usando una nuova promessa, promesse integrate in Javascript e supportate dalla versione Javascript che React
Native usa e la promessa assume una funzione che accetta una risoluzione e una funzione di rifiuto come argomento
e ora possiamo
spostare questo database codice di transazione lì dentro e in caso di successo, chiamo resol, il che significa
che la promessa esterna verrà risolta, nel caso di errore, chiamo rifiuto e inoltro
il mio errore qui e quindi posso restituire la promessa qui
nel mio metodo init e ora posso chiamare il metodo init da altre posizioni nell'app e ricevo
una promessa che risolverà se siamo riusciti a inizializzare il database, quindi a creare
la tabella o se abbiamo riscontrato un errore. A proposito, se non viene creata alcuna tabella perché
esiste già, non avremo un errore ma finiremo comunque in un caso di successo. Quindi, con questo, non stiamo ancora memorizzando nulla nel
database ma stiamo configurando il database.
Quindi ora assicuriamoci di chiamare init e ovviamente il posto per chiamarla è l'app. js file perché
vogliamo inizializzare il database il
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
di sorprendente che è la funzione e quindi qui quando questa app. Il file js viene eseguito, quando inizializziamo
anche l'archivio Redux e così via, voglio chiamare init qui e ora init ha esito positivo o no, quindi
per ora aggiungerò solo un blocco quindi dove dico che il database della console è stato inizializzato, quindi questo è il caso
di
successo o un blocco catch in cui si verifica un potenziale errore in cui il log della console inizializza il db
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
inizializzato che è l'output da iPhone e ora che è stato avviato su Android, lo
vedi anche per Android.
In modo che funzioni e ora abbiamo inizializzato un database, è ora di aggiungere anche altri metodi per assicurarci di poter anche
inserire i dati e, in seguito, ovviamente, recuperare i dati.