1 00:00:02,100 --> 00:00:05,240 Plongeons-nous donc dans SQLite. Encore une fois, nous avons 2 00:00:05,300 --> 00:00:11,100 obtenu un module pour celui pris en charge par expo que nous installons tout comme nous avons également installé 3 00:00:11,130 --> 00:00:12,120 les autres 4 00:00:12,120 --> 00:00:18,570 modules natifs et maintenant juste quelques mots rapides sur SQLite. SQLite est un système de base de données que vous pourriez dire 5 00:00:18,570 --> 00:00:22,840 qui est disponible à la fois sur iOS et Android, donc vous pouvez rapidement configurer une 6 00:00:22,860 --> 00:00:30,240 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 7 00:00:30,570 --> 00:00:32,860 des requêtes sur cette base de données. 8 00:00:32,940 --> 00:00:39,030 Maintenant, je ne vais pas plonger profondément dans la syntaxe SQL ici, car ce n'est évidemment pas un cours 9 00:00:39,030 --> 00:00:41,730 SQL, mais pour tout savoir sur la façon 10 00:00:41,730 --> 00:00:50,880 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 11 00:00:50,880 --> 00:00:56,550 SQLite dans une application expo où vous pouvez voir plus d'exemples sur la façon de supprimer des trucs 12 00:00:56,550 --> 00:01:02,460 et ainsi de suite et vous trouverez également une référence SQL pour SQLite où vous pouvez en savoir plus 13 00:01:02,460 --> 00:01:03,990 sur la syntaxe SQL. 14 00:01:03,990 --> 00:01:06,630 Je vais montrer une syntaxe de base maintenant dans 15 00:01:06,720 --> 00:01:10,360 ce module, mais pour toutes les choses que vous pouvez faire dans vos requêtes, 16 00:01:10,470 --> 00:01:17,170 pour toutes les commandes que vous pouvez exécuter, consultez certainement ces ressources. Maintenant avec cela, ajoutons SQLite en exécutant expo 17 00:01:17,170 --> 00:01:24,010 install expo-sqlite dans notre projet qui installera ceci dans notre projet ici et cela fonctionnera comme avant, 18 00:01:24,010 --> 00:01:27,250 aucune configuration supplémentaire n'est nécessaire et une 19 00:01:28,510 --> 00:01:32,720 fois cette installation terminée, nous pouvons commencer à travailler avec SQLite. 20 00:01:32,830 --> 00:01:35,750 Maintenant, travailler avec la base de données implique deux choses, par exemple, 21 00:01:35,770 --> 00:01:41,020 vous devez ouvrir une connexion à la base de données et si aucune base de données n'existe encore, ce qui est le 22 00:01:41,020 --> 00:01:46,260 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 23 00:01:46,450 --> 00:01:51,070 de données. et après avoir cette connexion à cette base de données créée, vous pouvez bien sûr exécuter des 24 00:01:51,070 --> 00:01:52,090 requêtes sur celle-ci. 25 00:01:52,090 --> 00:01:57,310 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 26 00:01:57,310 --> 00:02:03,220 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 27 00:02:03,220 --> 00:02:10,210 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 28 00:02:10,290 --> 00:02:13,810 voyez, la syntaxe d'importation est maintenant un peu différente de celle des autres packages. 29 00:02:13,980 --> 00:02:19,320 Au lieu d'importer star en tant que SQLite à partir de ce package, nous l'installons ici avec cette syntaxe 30 00:02:19,320 --> 00:02:20,300 d'importation nommée, à 31 00:02:20,310 --> 00:02:22,180 part cela, c'est toujours très similaire 32 00:02:22,500 --> 00:02:25,110 et maintenant nous pouvons commencer à utiliser ce package ici. 33 00:02:25,260 --> 00:02:31,080 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 34 00:02:31,080 --> 00:02:34,290 la base de données ouverte SQLite et là nous passons un nom de 35 00:02:34,290 --> 00:02:39,020 base de données qui pourrait être des lieux. db. 36 00:02:39,060 --> 00:02:43,980 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 37 00:02:44,010 --> 00:02:48,990 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 38 00:02:49,080 --> 00:02:50,370 données, c'est donc très trivial. 39 00:02:50,380 --> 00:02:55,110 Maintenant, cette ligne de code sera exécutée chaque fois que nous exécuterons ce fichier, ce qui se produit effectivement lorsque 40 00:02:55,170 --> 00:02:57,870 nous importons ce fichier pour la première fois n'importe où. 41 00:02:57,990 --> 00:03:04,320 Maintenant, je veux également ajouter une fonction init ici stockée dans une constante que je fais pour initialiser 42 00:03:04,320 --> 00:03:08,890 cette base de données et j'exporterai cette fonction comme une exportation nommée. 43 00:03:08,910 --> 00:03:15,300 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 44 00:03:15,300 --> 00:03:21,450 des tables qui contiennent vos enregistrements et les enregistrements sont essentiellement les lignes de données que vous ajoutez à votre table. 45 00:03:21,450 --> 00:03:27,420 Maintenant, au départ, lorsque nous créons la base de données, elle est vide, mais pour stocker des lieux, nous avons besoin 46 00:03:27,420 --> 00:03:29,200 d'une table pouvant contenir ces lieux. 47 00:03:29,220 --> 00:03:35,190 Je veux donc avoir une fonction d'initialisation ici qui créera réellement cette table si elle n'existe pas 48 00:03:35,190 --> 00:03:35,900 encore. 49 00:03:36,690 --> 00:03:44,780 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 50 00:03:44,790 --> 00:03:50,220 sur la base de données et vous trouverez tout cela dans les documents officiels bien 51 00:03:50,220 --> 00:03:51,560 sûr et cette 52 00:03:51,780 --> 00:03:57,570 méthode de transaction prend une fonction comme argument qui vous donne accès à l'objet de 53 00:03:57,660 --> 00:03:59,620 transaction qu'il crée pour vous. 54 00:03:59,750 --> 00:04:06,870 Le concept de transactions est tout simplement un concept où ce package garantit à la fin que votre requête est toujours exécutée 55 00:04:06,870 --> 00:04:13,200 dans son ensemble et que si une partie de la requête échoue, la requête entière est annulée afin que 56 00:04:13,200 --> 00:04:17,340 vous ne puissiez pas finir avec des données corrompues dans votre 57 00:04:17,340 --> 00:04:21,670 base de données, c'est pourquoi vous encapsulez chaque requête dans une telle transaction. 58 00:04:21,750 --> 00:04:26,760 Donc, cela crée une transaction ou initialise une transaction et vous donne ensuite accès à cet 59 00:04:26,790 --> 00:04:30,830 objet de transaction ici dans cette fonction qui sera exécutée pour vous. 60 00:04:30,840 --> 00:04:37,890 Donc, ici, nous pouvons maintenant utiliser cet objet de transaction pour exécuter une requête SQL 61 00:04:37,890 --> 00:04:39,450 à l'aide de 62 00:04:39,450 --> 00:04:48,260 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 63 00:04:48,530 --> 00:04:52,500 c'est la partie où vous pouvez plonger dans le document 64 00:04:52,520 --> 00:04:57,450 SQL que j'ai mentionné plus tôt où vous pouvez tout apprendre sur le langage SQL. 65 00:04:57,560 --> 00:05:02,840 Maintenant, je veux créer ici une table que nous faisons avec la commande create table et vous n'avez 66 00:05:02,870 --> 00:05:03,980 pas besoin d'écrire ceci 67 00:05:03,980 --> 00:05:11,600 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 68 00:05:11,600 --> 00:05:12,590 table si 69 00:05:12,590 --> 00:05:19,130 elle n'existe pas ce que nous faisons avec la restriction sinon existe ici et maintenant le nom de la table sera des 70 00:05:19,130 --> 00:05:20,750 lieux, en minuscules, maintenant c'est 71 00:05:20,750 --> 00:05:23,300 ma propre chose dynamique ici, à droite je veux 72 00:05:23,360 --> 00:05:28,760 le nommer des lieux et maintenant entre entre parenthèses, vous configurez ce qui est dans le tableau et 73 00:05:28,760 --> 00:05:31,110 par la suite, vous pouvez ajouter un point-virgule. 74 00:05:31,130 --> 00:05:35,420 Alors maintenant, nous définissons les différents champs que nous voulons avoir dans cette table, les 75 00:05:35,450 --> 00:05:42,380 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 76 00:05:42,380 --> 00:05:44,660 l'un des types de données pris en 77 00:05:44,660 --> 00:05:50,360 charge dans SQL et ce sera une clé primaire, ce qui signifie qu'elle sera également forcée d'être unique, vous ne 78 00:05:50,360 --> 00:05:55,400 pouvez pas avoir le même ID deux fois et elle générera automatiquement cet ID pour vous, ce qui 79 00:05:55,400 --> 00:05:57,880 est très pratique et ne devrait pas être 80 00:05:57,890 --> 00:06:03,680 nul, donc l'ajout une valeur vide ne sera pas autorisée. Maintenant, avec une virgule, nous pouvons ajouter 81 00:06:03,680 --> 00:06:08,030 la colonne suivante que nous voulons avoir et ce sera mon titre. 82 00:06:08,030 --> 00:06:14,460 Maintenant, le titre doit être de type texte et vous pouvez également y ajouter non null si vous le souhaitez, toutes mes 83 00:06:14,670 --> 00:06:17,200 données ne doivent pas être null en fait. 84 00:06:17,670 --> 00:06:22,860 Maintenant, en plus du titre, je veux aussi que l'imageUri soit stockée dedans et c'est aussi du texte 85 00:06:22,860 --> 00:06:24,110 qui n'est pas nul. 86 00:06:24,120 --> 00:06:28,950 C'est du texte bien sûr et pas un fichier ou quelque chose comme ça parce que nous ne 87 00:06:29,220 --> 00:06:34,020 stockons pas le fichier dans la base de données, nous stockons le chemin d'accès au fichier dans 88 00:06:34,020 --> 00:06:40,530 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à 89 00:06:40,530 --> 00:06:47,760 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 90 00:06:47,760 --> 00:06:54,990 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 91 00:06:55,050 --> 00:06:56,330 sont pas tous nuls. 92 00:06:56,340 --> 00:07:03,090 Maintenant, nous ne récupérons pas encore l'emplacement, mais nous le ferons plus tard et nous exprimerons un emplacement sous 93 00:07:03,090 --> 00:07:10,080 la forme d'une combinaison de latitude et de longitude qui est la façon standard d'exprimer des points sur le monde. 94 00:07:10,110 --> 00:07:14,150 Donc, cela crée une telle table maintenant si elle n'existe pas déjà. 95 00:07:14,150 --> 00:07:20,130 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 96 00:07:20,130 --> 00:07:22,500 n'avons pas encore besoin, ce sont des arguments 97 00:07:22,590 --> 00:07:26,850 dynamiques que vous pouvez injecter dans cette requête mais nous n'en avons pas besoin ici et 98 00:07:27,120 --> 00:07:33,810 alors nous avons deux fonctions ici comme argument numéro trois et quatre. La première fonction que nous transmettons est une 99 00:07:33,810 --> 00:07:35,790 fonction de réussite, elle 100 00:07:36,000 --> 00:07:38,940 s'exécute si cette commande a réussi. 101 00:07:38,940 --> 00:07:43,140 Le deuxième argument est une fonction d'erreur qui s'exécute en cas d'échec. 102 00:07:43,200 --> 00:07:48,930 Maintenant, le premier argument de chaque fonction ici et ces fonctions sont exécutées en votre nom par le package 103 00:07:48,930 --> 00:07:50,510 SQL bien sûr, donc 104 00:07:50,520 --> 00:07:54,990 ces fonctions toujours comme premier argument obtiennent essentiellement la requête que vous avez exécutée et 105 00:07:55,140 --> 00:07:59,490 en ajoutant un trait de soulignement comme nom ici, je signale que Je m'en 106 00:07:59,490 --> 00:08:01,740 fous mais je suis intéressé par le 107 00:08:01,740 --> 00:08:10,130 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. 108 00:08:10,170 --> 00:08:17,100 Donc ici, je vais créer une promesse en utilisant une nouvelle promesse, des promesses intégrées à Javascript et prises en charge par 109 00:08:17,100 --> 00:08:23,820 la version Javascript React Native utilise et promet prend une fonction qui prend une résolution et une fonction de rejet comme argument 110 00:08:23,910 --> 00:08:25,290 et maintenant nous pouvons 111 00:08:25,800 --> 00:08:32,190 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 112 00:08:32,220 --> 00:08:37,200 que la promesse externe sera résolue, dans le cas d'erreur, j'appelle rejeter et transmettre mon erreur 113 00:08:37,200 --> 00:08:41,220 ici et ensuite je peux retourner la promesse ici globalement dans ma 114 00:08:41,220 --> 00:08:47,400 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 115 00:08:47,400 --> 00:08:52,220 qui résoudra si nous avons réussi à initialiser la base de données, donc à créer 116 00:08:52,230 --> 00:08:58,440 la table ou si nous avons rencontré une erreur. Soit dit en passant, si aucune table n'est créée car elle 117 00:08:58,440 --> 00:09:06,680 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 118 00:09:06,680 --> 00:09:10,100 de données, mais nous configurons la base de données. 119 00:09:10,100 --> 00:09:15,260 Alors maintenant, assurons-nous d'appeler init et bien sûr l'endroit où l'appeler est l'application. Fichier js car nous 120 00:09:15,260 --> 00:09:18,060 voulons initialiser la base de données 121 00:09:18,140 --> 00:09:25,700 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 122 00:09:25,700 --> 00:09:30,620 c'est quelque chose sans surprise est la fonction et donc ici lorsque cette application. Le fichier js s'exécute, lorsque nous initialisons 123 00:09:30,750 --> 00:09:37,550 également le magasin Redux et ainsi de suite, je veux appeler init ici et maintenant init est réussi ou non, 124 00:09:37,550 --> 00:09:45,380 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 125 00:09:45,770 --> 00:09:46,520 c'est 126 00:09:46,550 --> 00:09:54,200 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 127 00:09:54,230 --> 00:10:03,610 é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 128 00:10:04,000 --> 00:10:09,880 données du journal initialisée qui est la sortie de l'iPhone et maintenant qu'il a commencé sur Android, vous 129 00:10:09,880 --> 00:10:11,920 le voyez là aussi pour Android. 130 00:10:12,070 --> 00:10:18,610 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 131 00:10:18,610 --> 00:10:21,820 également insérer des données et plus tard, bien sûr, récupérer des données.