1 00:00:02,180 --> 00:00:05,750 Avec la base de données initialisée, assurons-nous de pouvoir y stocker des données. 2 00:00:05,750 --> 00:00:13,460 Revenons donc à la base de données. fichier js dans le dossier helpers, nous pouvons ajouter une nouvelle constante, insérer 3 00:00:13,460 --> 00:00:14,850 un lieu par exemple 4 00:00:15,110 --> 00:00:21,650 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 5 00:00:21,930 --> 00:00:27,770 un latitude et longitude, donc je veux obtenir toutes les données qui composent un lieu et là-dedans, maintenant je 6 00:00:27,800 --> 00:00:33,950 veux insérer le lieu dans la base de données. Pour cela, nous utiliserons la même syntaxe qu'ici, 7 00:00:33,950 --> 00:00:39,890 donc je peux simplement copier ceci parce que je veux également avoir une promesse comme wrapper ici afin 8 00:00:39,890 --> 00:00:45,430 que je puisse facilement utiliser ensuite et attraper ou asynchroniser attendre à l'endroit où j'appelle insert place 9 00:00:45,560 --> 00:00:49,010 mais bien sûr, la requête que j'exécute maintenant est différente. 10 00:00:49,010 --> 00:00:52,380 Au lieu de créer une table, je veux maintenant insérer 11 00:00:52,400 --> 00:00:56,620 des données dans la table et cela se fait avec l'insertion dans la commande. 12 00:00:56,660 --> 00:01:02,450 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, 13 00:01:02,450 --> 00:01:03,380 je veux cibler 14 00:01:03,410 --> 00:01:08,840 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 15 00:01:08,840 --> 00:01:10,320 pratique pour Bien sûr, mais 16 00:01:10,520 --> 00:01:15,510 je veux cibler mon champ de titre et maintenant vous devez vous assurer que vous faites correspondre les 17 00:01:15,510 --> 00:01:17,360 noms que vous avez définis là-bas pour 18 00:01:17,450 --> 00:01:20,150 vos colonnes, vous devez faire correspondre ces noms ici maintenant. 19 00:01:20,180 --> 00:01:24,480 L'ordre ne doit pas nécessairement être le même mais la dénomination est importante, 20 00:01:24,500 --> 00:01:27,400 donc je veux cibler le titre, l'imageUri, 21 00:01:27,410 --> 00:01:30,360 c'est aussi un nom que j'ai choisi là-haut, non? 22 00:01:30,440 --> 00:01:32,660 Donc imageUri, adresse, latitude et 23 00:01:32,660 --> 00:01:34,610 longitude et maintenant 24 00:01:34,610 --> 00:01:38,110 nous devons spécifier quelles valeurs doivent y entrer. 25 00:01:38,120 --> 00:01:44,260 Pour ce faire, ajoutez le mot clé values ici après cette liste de colonnes que vous souhaitez cibler et vous 26 00:01:44,310 --> 00:01:50,330 avez maintenant une autre paire de parenthèses ici où vous spécifiez les valeurs qui doivent entrer dans chacune de 27 00:01:50,330 --> 00:01:51,310 ces colonnes. 28 00:01:51,320 --> 00:01:56,120 Maintenant, l'ordre des valeurs ici doit bien sûr correspondre à l'ordre des identificateurs de colonne que 29 00:01:56,150 --> 00:02:02,820 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. 30 00:02:02,840 --> 00:02:08,570 Maintenant, ce que vous pouvez faire ici, c'est que vous pouvez bien sûr utiliser des tiques inversées 31 00:02:08,570 --> 00:02:15,970 au lieu de guillemets simples, puis par exemple injecter le titre ici, puis avoir une virgule, puis l'imageUri et ainsi de suite. 32 00:02:15,970 --> 00:02:20,270 Vous pourriez le faire et cela fonctionnerait, mais ce ne serait 33 00:02:20,290 --> 00:02:21,940 pas bon, ce 34 00:02:21,940 --> 00:02:32,350 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 35 00:02:32,350 --> 00:02:37,240 là-dedans et exécuter d'autres requêtes qui pourraient casser la base de données. 36 00:02:37,240 --> 00:02:42,210 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 37 00:02:42,210 --> 00:02:47,830 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, 38 00:02:47,850 --> 00:02:52,960 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. 39 00:02:53,050 --> 00:02:58,450 Donc, ici, je saisis cinq valeurs, donc ici j'ai cinq points d'interrogation séparés par des virgules. 40 00:02:58,540 --> 00:03:03,700 Maintenant, les valeurs concrètes des points d'interrogation sont fournies dans le deuxième argument que vous passez 41 00:03:03,700 --> 00:03:07,990 pour exécuter SQL, ce tableau d'arguments. Auparavant, il était vide, maintenant 42 00:03:08,020 --> 00:03:11,860 nous remplissons les arguments dans l'ordre dont nous avons besoin, 43 00:03:11,860 --> 00:03:19,570 donc le titre d'abord, puis imageUri et ainsi de suite et le package SQL échangera ensuite ces points d'interrogation pour nos 44 00:03:19,810 --> 00:03:27,030 valeurs, mais pas avant de les valider pour garantir qu'un tel une attaque par injection ne peut pas se produire. 45 00:03:27,070 --> 00:03:33,050 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 46 00:03:33,160 --> 00:03:36,040 de données était l'imageUri, puis nous avons besoin de l'adresse, 47 00:03:36,280 --> 00:03:37,450 puis nous avons 48 00:03:37,450 --> 00:03:40,210 besoin de la latitude et ensuite de la longitude, donc 49 00:03:40,240 --> 00:03:47,310 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 50 00:03:47,320 --> 00:03:52,510 mentionné, le premier argument est toujours comme la répétition de votre requête, mais le deuxième 51 00:03:52,510 --> 00:03:56,540 argument est alors soit l'erreur, soit ici le résultat de cette 52 00:03:56,650 --> 00:04:02,910 requête et ici, je veux résoudre ce résultat de sorte qu'à l'endroit où nous appelons insert place, 53 00:04:02,910 --> 00:04:09,490 nous pouvons alors écouter la résolution de la promesse et obtenir le résultat de cette requête qui devrait être 54 00:04:09,490 --> 00:04:12,640 une information sur l'enregistrement qui a été créé. 55 00:04:12,650 --> 00:04:18,730 Alors maintenant, nous pouvons appeler insert place et bien sûr l'endroit où je veux l'appeler à nouveau est mon fichier d'actions 56 00:04:18,730 --> 00:04:19,370 de lieux. 57 00:04:19,610 --> 00:04:21,810 Là, nous déplaçons l'image, là aussi je veux 58 00:04:21,830 --> 00:04:28,700 maintenant tendre la main à ma base de données et ajouter une entrée. Pour ce faire, ici d'abord, importons cette 59 00:04:28,910 --> 00:04:40,980 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 60 00:04:41,100 --> 00:04:46,450 fichiers et ainsi de suite, ici, bien sûr, je continue aussi dans le 61 00:04:46,470 --> 00:04:52,290 bloc try catch, vous voulez essayer d'insérer des données dans la base de données. 62 00:04:52,380 --> 00:04:53,520 Cela peut également 63 00:04:53,520 --> 00:04:57,600 échouer, donc l'avoir dans un bloc d'essai n'est pas la pire idée. 64 00:04:57,630 --> 00:05:03,930 Donc ici, je peux appeler insert place et cela renvoie une promesse parce que nous avons notre propre promesse là-dedans, donc 65 00:05:03,930 --> 00:05:05,370 nous pouvons attendre cela 66 00:05:05,730 --> 00:05:11,460 et je récupère mon résultat DB par la suite, donc je vais le stocker dans un endroit constant 67 00:05:11,460 --> 00:05:17,200 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. 68 00:05:17,270 --> 00:05:19,960 Maintenant donc je vais transmettre mon titre que j'ai 69 00:05:19,960 --> 00:05:27,240 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 70 00:05:27,240 --> 00:05:29,700 encore de véritable adresse. Pour la latitude, je 71 00:05:29,700 --> 00:05:35,760 vais utiliser un nombre fictif de 15. 6 et pour la longitude, disons 12. 3. 72 00:05:35,760 --> 00:05:39,750 Maintenant, cela pourrait être au milieu de l'océan, je ne sais pas, mais au 73 00:05:39,780 --> 00:05:45,730 moins nous avons ici des coordonnées que nous pouvons utiliser pour l'instant jusqu'à ce que nous puissions trouver un emplacement réel. 74 00:05:45,750 --> 00:05:51,960 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 75 00:05:51,960 --> 00:05:57,730 cette action et ne touchons donc notre magasin Redux que si nous avons réussi à la fois avec le système de 76 00:05:57,730 --> 00:06:00,330 fichiers et l'action de base de données, donc à 77 00:06:00,330 --> 00:06:06,690 l'intérieur du essayez de bloquer et maintenant, jetons un œil à cela. Maintenant, nous devrions être en mesure de stocker des 78 00:06:06,690 --> 00:06:07,740 données dans 79 00:06:07,770 --> 00:06:11,790 la base de données, alors testons cela sur Android où nous 80 00:06:11,790 --> 00:06:14,240 pouvons prendre une image, c'est un test. 81 00:06:14,270 --> 00:06:24,980 Prenons une image ici et voyons si tout cela fonctionne en recadrant cette image et en sauvegardant cet endroit. 82 00:06:25,090 --> 00:06:26,280 Cela fonctionne et ici 83 00:06:26,380 --> 00:06:31,380 nous voyons une sortie, nous voyons que c'est le résultat de notre action de base de données 84 00:06:31,480 --> 00:06:37,000 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 85 00:06:37,000 --> 00:06:38,460 qui a été créé automatiquement. 86 00:06:38,500 --> 00:06:41,710 C'est un ID numérique ici, mais ce n'est bien sûr pas 87 00:06:41,710 --> 00:06:47,920 un problème, alors maintenant nous pouvons également utiliser cet ID dans notre réducteur au lieu de créer manuellement cet ID 88 00:06:47,920 --> 00:06:49,060 d'instantané d'état ici. 89 00:06:49,060 --> 00:06:51,520 C'est donc une petite amélioration, lorsque nous 90 00:06:51,520 --> 00:06:59,600 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 91 00:06:59,600 --> 00:07:05,780 la constante de résultat DB et là, il est dans le champ ID d'insertion ici comme vous pouvez 92 00:07:05,780 --> 00:07:06,170 le 93 00:07:06,170 --> 00:07:13,000 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 94 00:07:13,000 --> 00:07:17,330 pouvons simplement nous référer à l'action. placeData. id. 95 00:07:17,330 --> 00:07:22,100 Maintenant, gardez à l'esprit qu'il s'agit d'un nombre, ici, je veux en fait avoir une 96 00:07:22,100 --> 00:07:28,760 chaîne, mais vous pouvez également garder un nombre, mais je vais le convertir en chaîne ici et avec cela, nous utilisons également 97 00:07:28,760 --> 00:07:34,850 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 98 00:07:34,850 --> 00:07:37,580 redémarre, car en ce moment, quand elle redémarre, les données sont toujours perdues, ce 99 00:07:37,700 --> 00:07:39,950 n'est pas vraiment perdu, ce n'est pas une base de données 100 00:07:39,950 --> 00:07:45,230 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 101 00:07:45,230 --> 00:07:46,640 utilisons dans l'application en cours d'exécution. 102 00:07:46,940 --> 00:07:50,840 Nous devons donc nous assurer de charger les données dans le magasin Redux lorsque cette application démarre.