Plongeons-nous donc dans SQLite. Encore une fois, nous avons
obtenu un module pour celui pris en charge par expo que nous installons tout comme nous avons également installé
les autres
modules natifs et maintenant juste quelques mots rapides sur SQLite. SQLite est un système de base de données que vous pourriez dire
qui est disponible à la fois sur iOS et Android, donc vous pouvez rapidement configurer une
telle base de données là-bas, ce sera super facile avec ce module et vous pouvez ensuite utiliser une syntaxe SQL, une syntaxe SQL de base pour exécuter
des requêtes sur cette base de données.
Maintenant, je ne vais pas plonger profondément dans la syntaxe SQL ici, car ce n'est évidemment pas un cours
SQL, mais pour tout savoir sur la façon
de l'utiliser, consultez évidemment les documents officiels et en pièce jointe, vous trouverez également un lien avec un extrait plus détaillé qui plonge sur la façon d'utiliser le package
SQLite dans une application expo où vous pouvez voir plus d'exemples sur la façon de supprimer des trucs
et ainsi de suite et vous trouverez également une référence SQL pour SQLite où vous pouvez en savoir plus
sur la syntaxe SQL.
Je vais montrer une syntaxe de base maintenant dans
ce module, mais pour toutes les choses que vous pouvez faire dans vos requêtes,
pour toutes les commandes que vous pouvez exécuter, consultez certainement ces ressources. Maintenant avec cela, ajoutons SQLite en exécutant expo
install expo-sqlite dans notre projet qui installera ceci dans notre projet ici et cela fonctionnera comme avant,
aucune configuration supplémentaire n'est nécessaire et une
fois cette installation terminée, nous pouvons commencer à travailler avec SQLite.
Maintenant, travailler avec la base de données implique deux choses, par exemple,
vous devez ouvrir une connexion à la base de données et si aucune base de données n'existe encore, ce qui est le
cas lorsque vous y accédez pour la première fois pendant la durée de vie de votre application, il créera également cette base
de données. et après avoir cette connexion à cette base de données créée, vous pouvez bien sûr exécuter des
requêtes sur celle-ci.
Donc pour cela, je vais ajouter un dossier d'aide avec une base de données. fichier js là-dedans que vous n'avez pas besoin de
faire mais je veux avoir ma logique de base de données là-bas pour garder mes autres fichiers maigres et pour que j'aie un
fichier où nous pouvons voir toute la logique de la base de données. Maintenant, nous pouvons importer SQLite à partir du package et comme vous le
voyez, la syntaxe d'importation est maintenant un peu différente de celle des autres packages.
Au lieu d'importer star en tant que SQLite à partir de ce package, nous l'installons ici avec cette syntaxe
d'importation nommée, à
part cela, c'est toujours très similaire
et maintenant nous pouvons commencer à utiliser ce package ici.
Maintenant, tout d'abord, je vais créer une constante db qui contient une référence à ma base de données que j'obtiens en exécutant
la base de données ouverte SQLite et là nous passons un nom de
base de données qui pourrait être des lieux. db.
Maintenant, cela va se connecter à cette base de données ou créer la base de données s'il ne la trouve pas, donc
lorsque nous avons lancé l'application pour la première fois et que vous n'avez rien d'autre à faire pour accéder à la base de
données, c'est donc très trivial.
Maintenant, cette ligne de code sera exécutée chaque fois que nous exécuterons ce fichier, ce qui se produit effectivement lorsque
nous importons ce fichier pour la première fois n'importe où.
Maintenant, je veux également ajouter une fonction init ici stockée dans une constante que je fais pour initialiser
cette base de données et j'exporterai cette fonction comme une exportation nommée.
Maintenant, dans cette fonction, je veux m'assurer que nous créons une table de base car les bases de données SQL fonctionnent avec
des tables qui contiennent vos enregistrements et les enregistrements sont essentiellement les lignes de données que vous ajoutez à votre table.
Maintenant, au départ, lorsque nous créons la base de données, elle est vide, mais pour stocker des lieux, nous avons besoin
d'une table pouvant contenir ces lieux.
Je veux donc avoir une fonction d'initialisation ici qui créera réellement cette table si elle n'existe pas
encore.
Donc là, je peux utiliser ma constante db qui pointe vers cette base de données et exécuter la transaction. Maintenant, transaction est une méthode offerte par le package SQLite
sur la base de données et vous trouverez tout cela dans les documents officiels bien
sûr et cette
méthode de transaction prend une fonction comme argument qui vous donne accès à l'objet de
transaction qu'il crée pour vous.
Le concept de transactions est tout simplement un concept où ce package garantit à la fin que votre requête est toujours exécutée
dans son ensemble et que si une partie de la requête échoue, la requête entière est annulée afin que
vous ne puissiez pas finir avec des données corrompues dans votre
base de données, c'est pourquoi vous encapsulez chaque requête dans une telle transaction.
Donc, cela crée une transaction ou initialise une transaction et vous donne ensuite accès à cet
objet de transaction ici dans cette fonction qui sera exécutée pour vous.
Donc, ici, nous pouvons maintenant utiliser cet objet de transaction pour exécuter une requête SQL
à l'aide de
la méthode d'exécution SQL, qui est également documentée ici. Donc, exécuter SQL prend maintenant une chaîne qui décrit votre requête SQL et
c'est la partie où vous pouvez plonger dans le document
SQL que j'ai mentionné plus tôt où vous pouvez tout apprendre sur le langage SQL.
Maintenant, je veux créer ici une table que nous faisons avec la commande create table et vous n'avez
pas besoin d'écrire ceci
en majuscules, je fais juste cela pour qu'il soit clair que ce sont des commandes standard construites dans le langage SQL et je veux créer la
table si
elle n'existe pas ce que nous faisons avec la restriction sinon existe ici et maintenant le nom de la table sera des
lieux, en minuscules, maintenant c'est
ma propre chose dynamique ici, à droite je veux
le nommer des lieux et maintenant entre entre parenthèses, vous configurez ce qui est dans le tableau et
par la suite, vous pouvez ajouter un point-virgule.
Alors maintenant, nous définissons les différents champs que nous voulons avoir dans cette table, les
différentes colonnes pour ainsi dire et je veux avoir une colonne ID et je vais le configurer pour être de type entier qui est
l'un des types de données pris en
charge dans SQL et ce sera une clé primaire, ce qui signifie qu'elle sera également forcée d'être unique, vous ne
pouvez pas avoir le même ID deux fois et elle générera automatiquement cet ID pour vous, ce qui
est très pratique et ne devrait pas être
nul, donc l'ajout une valeur vide ne sera pas autorisée. Maintenant, avec une virgule, nous pouvons ajouter
la colonne suivante que nous voulons avoir et ce sera mon titre.
Maintenant, le titre doit être de type texte et vous pouvez également y ajouter non null si vous le souhaitez, toutes mes
données ne doivent pas être null en fait.
Maintenant, en plus du titre, je veux aussi que l'imageUri soit stockée dedans et c'est aussi du texte
qui n'est pas nul.
C'est du texte bien sûr et pas un fichier ou quelque chose comme ça parce que nous ne
stockons pas le fichier dans la base de données, nous stockons le chemin d'accès au fichier dans
la base de données qui est une chaîne et maintenant quelque chose d'autre dont nous aurons besoin plus tard qui Je veux aussi déjà
configurer mon adresse qui est un texte, qui devrait être une chaîne qui décrit l'adresse du lieu et un champ de latitude ou juste lat qui est
un réel, qui est un nombre à virgule flottante à la fin et le longitude ici abrégée avec lng qui est aussi un réel et ceux-ci ne
sont pas tous nuls.
Maintenant, nous ne récupérons pas encore l'emplacement, mais nous le ferons plus tard et nous exprimerons un emplacement sous
la forme d'une combinaison de latitude et de longitude qui est la façon standard d'exprimer des points sur le monde.
Donc, cela crée une telle table maintenant si elle n'existe pas déjà.
Maintenant, la méthode d'exécution SQL prend également un deuxième argument qui est un tableau d'arguments qui entrera en jeu plus tard dont nous
n'avons pas encore besoin, ce sont des arguments
dynamiques que vous pouvez injecter dans cette requête mais nous n'en avons pas besoin ici et
alors nous avons deux fonctions ici comme argument numéro trois et quatre. La première fonction que nous transmettons est une
fonction de réussite, elle
s'exécute si cette commande a réussi.
Le deuxième argument est une fonction d'erreur qui s'exécute en cas d'échec.
Maintenant, le premier argument de chaque fonction ici et ces fonctions sont exécutées en votre nom par le package
SQL bien sûr, donc
ces fonctions toujours comme premier argument obtiennent essentiellement la requête que vous avez exécutée et
en ajoutant un trait de soulignement comme nom ici, je signale que Je m'en
fous mais je suis intéressé par le
deuxième argument et ici, ce serait mon objet d'erreur et maintenant pour le rendre utilisable de manière simple, je vais en fait envelopper cela dans une promesse personnalisée.
Donc ici, je vais créer une promesse en utilisant une nouvelle promesse, des promesses intégrées à Javascript et prises en charge par
la version Javascript React Native utilise et promet prend une fonction qui prend une résolution et une fonction de rejet comme argument
et maintenant nous pouvons
déplacer cette base de données code de transaction là-dedans et dans le cas de réussite, j'appelle résoudre ce qui signifie
que la promesse externe sera résolue, dans le cas d'erreur, j'appelle rejeter et transmettre mon erreur
ici et ensuite je peux retourner la promesse ici globalement dans ma
méthode init et maintenant, je peux appeler la méthode init depuis d'autres endroits de l'application et je reçois une promesse
qui résoudra si nous avons réussi à initialiser la base de données, donc à créer
la table ou si nous avons rencontré une erreur. Soit dit en passant, si aucune table n'est créée car elle
existe déjà, nous n'obtiendrons pas d'erreur, mais nous nous retrouverons dans un cas de réussite. Donc, avec cela, nous ne stockons toujours rien dans la base
de données, mais nous configurons la base de données.
Alors maintenant, assurons-nous d'appeler init et bien sûr l'endroit où l'appeler est l'application. Fichier js car nous
voulons initialiser la base de données
dès que possible au démarrage de notre application. Je vais donc importer quelque chose à partir de mon dossier d'aide là-bas, à partir du fichier de base de données là-dedans et
c'est quelque chose sans surprise est la fonction et donc ici lorsque cette application. Le fichier js s'exécute, lorsque nous initialisons
également le magasin Redux et ainsi de suite, je veux appeler init ici et maintenant init est réussi ou non,
donc pour l'instant je vais simplement ajouter un bloc then où je dis la base de données initialisée du journal de la console, donc
c'est
le cas de réussite ou un bloc de capture où nous obtenons une erreur potentielle où l'initialisation du journal de la console a
échoué et où je consomme ensuite également la console l'erreur que nous avons obtenue. Et si nous enregistrons maintenant cela, vous devriez voir ici dans la base de
données du journal initialisée qui est la sortie de l'iPhone et maintenant qu'il a commencé sur Android, vous
le voyez là aussi pour Android.
Donc cela fonctionne et maintenant nous avons initialisé une base de données, il est temps d'ajouter maintenant plus de méthodes pour nous assurer que nous pouvons
également insérer des données et plus tard, bien sûr, récupérer des données.