Avec la base de données initialisée, assurons-nous de pouvoir y stocker des données.
Revenons donc à la base de données. fichier js dans le dossier helpers, nous pouvons ajouter une nouvelle constante, insérer
un lieu par exemple
que j'exporte et maintenant ici je veux obtenir le titre du lieu, je veux obtenir l'imageUri, je veux obtenir l'adresse et aussi
un latitude et longitude, donc je veux obtenir toutes les données qui composent un lieu et là-dedans, maintenant je
veux insérer le lieu dans la base de données. Pour cela, nous utiliserons la même syntaxe qu'ici,
donc je peux simplement copier ceci parce que je veux également avoir une promesse comme wrapper ici afin
que je puisse facilement utiliser ensuite et attraper ou asynchroniser attendre à l'endroit où j'appelle insert place
mais bien sûr, la requête que j'exécute maintenant est différente.
Au lieu de créer une table, je veux maintenant insérer
des données dans la table et cela se fait avec l'insertion dans la commande.
Maintenant, vous devez spécifier la table et ses emplacements, puis entre parenthèses, les champs que vous souhaitez cibler là-dedans et bien sûr,
je veux cibler
tous les champs à l'exception de l'ID car, comme je l'ai mentionné, ce sera généré automatiquement, ce qui est très
pratique pour Bien sûr, mais
je veux cibler mon champ de titre et maintenant vous devez vous assurer que vous faites correspondre les
noms que vous avez définis là-bas pour
vos colonnes, vous devez faire correspondre ces noms ici maintenant.
L'ordre ne doit pas nécessairement être le même mais la dénomination est importante,
donc je veux cibler le titre, l'imageUri,
c'est aussi un nom que j'ai choisi là-haut, non?
Donc imageUri, adresse, latitude et
longitude et maintenant
nous devons spécifier quelles valeurs doivent y entrer.
Pour ce faire, ajoutez le mot clé values ici après cette liste de colonnes que vous souhaitez cibler et vous
avez maintenant une autre paire de parenthèses ici où vous spécifiez les valeurs qui doivent entrer dans chacune de
ces colonnes.
Maintenant, l'ordre des valeurs ici doit bien sûr correspondre à l'ordre des identificateurs de colonne que
vous avez ici, donc la première valeur que vous entrez ici ira dans le titre, imageUri est la deuxième valeur et ainsi de suite.
Maintenant, ce que vous pouvez faire ici, c'est que vous pouvez bien sûr utiliser des tiques inversées
au lieu de guillemets simples, puis par exemple injecter le titre ici, puis avoir une virgule, puis l'imageUri et ainsi de suite.
Vous pourriez le faire et cela fonctionnerait, mais ce ne serait
pas bon, ce
n'est pas sûr, cela ouvre la porte à un modèle d'attaque appelé injection SQL, où les utilisateurs pourraient en quelque sorte insérer du code malveillant
là-dedans et exécuter d'autres requêtes qui pourraient casser la base de données.
Bien sûr, dans cette application où il s'agit d'une base de données locale uniquement sur l'appareil de cet utilisateur, ce n'est
peut-être pas super mauvais, mais nous voulons tout de même nous défendre contre cela et donc ici, vous utilisez en fait quelques espaces réservés,
vous ajoutez des points d'interrogation ici et vous avez besoin pour ajouter autant de points d'interrogation que nécessaire pour saisir des valeurs.
Donc, ici, je saisis cinq valeurs, donc ici j'ai cinq points d'interrogation séparés par des virgules.
Maintenant, les valeurs concrètes des points d'interrogation sont fournies dans le deuxième argument que vous passez
pour exécuter SQL, ce tableau d'arguments. Auparavant, il était vide, maintenant
nous remplissons les arguments dans l'ordre dont nous avons besoin,
donc le titre d'abord, puis imageUri et ainsi de suite et le package SQL échangera ensuite ces points d'interrogation pour nos
valeurs, mais pas avant de les valider pour garantir qu'un tel une attaque par injection ne peut pas se produire.
Nous obtenons donc une validation automatique supplémentaire en utilisant cette approche, puis nous pouvons entrer le titre ici, puis le deuxième élément
de données était l'imageUri, puis nous avons besoin de l'adresse,
puis nous avons
besoin de la latitude et ensuite de la longitude, donc
cela est de savoir comment nous passons maintenant nos données dans cette requête. Maintenant, dans ces fonctions de réussite, comme je l'ai
mentionné, le premier argument est toujours comme la répétition de votre requête, mais le deuxième
argument est alors soit l'erreur, soit ici le résultat de cette
requête et ici, je veux résoudre ce résultat de sorte qu'à l'endroit où nous appelons insert place,
nous pouvons alors écouter la résolution de la promesse et obtenir le résultat de cette requête qui devrait être
une information sur l'enregistrement qui a été créé.
Alors maintenant, nous pouvons appeler insert place et bien sûr l'endroit où je veux l'appeler à nouveau est mon fichier d'actions
de lieux.
Là, nous déplaçons l'image, là aussi je veux
maintenant tendre la main à ma base de données et ajouter une entrée. Pour ce faire, ici d'abord, importons cette
méthode d'insertion de place à partir du dossier helpers et là, à partir du fichier db et avec celui importé, en plus après la résolution de notre système de
fichiers et ainsi de suite, ici, bien sûr, je continue aussi dans le
bloc try catch, vous voulez essayer d'insérer des données dans la base de données.
Cela peut également
échouer, donc l'avoir dans un bloc d'essai n'est pas la pire idée.
Donc ici, je peux appeler insert place et cela renvoie une promesse parce que nous avons notre propre promesse là-dedans, donc
nous pouvons attendre cela
et je récupère mon résultat DB par la suite, donc je vais le stocker dans un endroit constant
et maintenant insérer bien sûr a besoin d'un titre, d'une imageUri, d'une adresse, d'une latitude et d'une longitude.
Maintenant donc je vais transmettre mon titre que j'ai
déjà, je vais transmettre le nouveau chemin qui est mon imageUri et maintenant pour l'adresse, je vais utiliser une adresse fictive car nous n'avons pas
encore de véritable adresse. Pour la latitude, je
vais utiliser un nombre fictif de 15. 6 et pour la longitude, disons 12. 3.
Maintenant, cela pourrait être au milieu de l'océan, je ne sais pas, mais au
moins nous avons ici des coordonnées que nous pouvons utiliser pour l'instant jusqu'à ce que nous puissions trouver un emplacement réel.
Maintenant, ce résultat de base de données est bien sûr intéressant, alors consolons-le et nous allons également nous assurer que nous ne distribuons
cette action et ne touchons donc notre magasin Redux que si nous avons réussi à la fois avec le système de
fichiers et l'action de base de données, donc à
l'intérieur du essayez de bloquer et maintenant, jetons un œil à cela. Maintenant, nous devrions être en mesure de stocker des
données dans
la base de données, alors testons cela sur Android où nous
pouvons prendre une image, c'est un test.
Prenons une image ici et voyons si tout cela fonctionne en recadrant cette image et en sauvegardant cet endroit.
Cela fonctionne et ici
nous voyons une sortie, nous voyons que c'est le résultat de notre action de base de données
et nous voyons qu'une ligne a été affectée car une ligne a été insérée et nous récupérons également l'ID
qui a été créé automatiquement.
C'est un ID numérique ici, mais ce n'est bien sûr pas
un problème, alors maintenant nous pouvons également utiliser cet ID dans notre réducteur au lieu de créer manuellement cet ID
d'instantané d'état ici.
C'est donc une petite amélioration, lorsque nous
envoyons notre action ici dans les données de lieu, je veux maintenant également fournir l'ID et cet ID peut être récupéré à partir de
la constante de résultat DB et là, il est dans le champ ID d'insertion ici comme vous pouvez
le
voir , nous allons donc accéder à insérer l'ID ici. Maintenant, dans le réducteur, nous n'avons donc plus besoin de le générer comme ceci, mais ici, nous
pouvons simplement nous référer à l'action. placeData. id.
Maintenant, gardez à l'esprit qu'il s'agit d'un nombre, ici, je veux en fait avoir une
chaîne, mais vous pouvez également garder un nombre, mais je vais le convertir en chaîne ici et avec cela, nous utilisons également
cet ID, nous stockons dans la base de données. Bien sûr, maintenant, ce serait bien de charger toutes nos données chaque fois que notre application
redémarre, car en ce moment, quand elle redémarre, les données sont toujours perdues, ce
n'est pas vraiment perdu, ce n'est pas une base de données
mais nous ne le voyons pas ici parce que nous ne chargez pas cela dans notre magasin Redux qui est alors bien sûr les données que nous
utilisons dans l'application en cours d'exécution.
Nous devons donc nous assurer de charger les données dans le magasin Redux lorsque cette application démarre.