1 00:00:02,180 --> 00:00:05,750 Stellen wir nach der Initialisierung der Datenbank sicher, dass wir dort Daten speichern können. 2 00:00:05,750 --> 00:00:13,460 Also zurück in die Datenbank. js-Datei im Ordner "helers" können wir eine neue Konstante hinzufügen, beispielsweise einen 3 00:00:13,460 --> 00:00:14,850 Ort einfügen, den ich 4 00:00:15,110 --> 00:00:21,650 exportiere, und jetzt möchte ich hier den Titel des Ortes erhalten, ich möchte die imageUri erhalten, ich möchte die Adresse und 5 00:00:21,930 --> 00:00:27,770 auch eine Breiten- und Längengrad, also möchte ich alle Daten abrufen, aus denen ein Ort besteht, und dort 6 00:00:27,800 --> 00:00:33,950 möchte ich nun den Ort in die Datenbank einfügen. Dafür verwenden wir die gleiche Syntax wie hier, 7 00:00:33,950 --> 00:00:39,890 damit ich diese einfach kopieren kann, da ich hier auch ein Versprechen als Wrapper haben möchte, damit ich sie 8 00:00:39,890 --> 00:00:45,430 dann bequem verwenden und an der Stelle, an der ich Insert Place anrufe, abfangen oder asynchron warten 9 00:00:45,560 --> 00:00:49,010 kann Aber natürlich ist die Abfrage, die ich jetzt ausführe, anders. 10 00:00:49,010 --> 00:00:52,380 Anstatt eine Tabelle zu erstellen, möchte ich jetzt Daten 11 00:00:52,400 --> 00:00:56,620 in die Tabelle einfügen, und das geschieht mit dem Befehl Einfügen in. 12 00:00:56,660 --> 00:01:02,450 Jetzt müssen Sie die Tabelle und die Stellen angeben und dann zwischen Klammern die Felder, auf die Sie dort abzielen 13 00:01:02,450 --> 00:01:03,380 möchten, und 14 00:01:03,410 --> 00:01:08,840 natürlich möchte ich alle Felder mit Ausnahme der ID als Ziel festlegen, da diese, wie bereits erwähnt, automatisch generiert 15 00:01:08,840 --> 00:01:10,320 werden, was sehr praktisch ist 16 00:01:10,520 --> 00:01:15,510 Natürlich, aber ich möchte auf mein Titelfeld abzielen und jetzt müssen Sie sicherstellen, dass Sie mit den Namen 17 00:01:15,510 --> 00:01:17,360 übereinstimmen, die Sie dort für Ihre Spalten 18 00:01:17,450 --> 00:01:20,150 eingerichtet haben. Sie müssen diese Namen jetzt hier abgleichen. 19 00:01:20,180 --> 00:01:24,480 Die Reihenfolge muss nicht dieselbe sein, aber die Benennung ist wichtig, also möchte ich 20 00:01:24,500 --> 00:01:27,400 den Titel als Ziel auswählen, das imageUri, das ist 21 00:01:27,410 --> 00:01:30,360 auch ein Name, den ich dort oben gewählt habe, oder? 22 00:01:30,440 --> 00:01:32,660 Also imageUri, Adresse, Breite und 23 00:01:32,660 --> 00:01:34,610 Länge und jetzt 24 00:01:34,610 --> 00:01:38,110 müssen wir angeben, welche Werte dort hineingehen sollen. 25 00:01:38,120 --> 00:01:44,260 Sie tun dies, indem Sie das Schlüsselwort values hier nach dieser Liste von Spalten hinzufügen, auf die Sie abzielen möchten. 26 00:01:44,310 --> 00:01:50,330 Jetzt haben Sie hier ein weiteres Klammerpaar, in dem Sie die Werte angeben, die in jede dieser Spalten aufgenommen 27 00:01:50,330 --> 00:01:51,310 werden sollen. 28 00:01:51,320 --> 00:01:56,120 Jetzt muss die Reihenfolge der Werte hier natürlich mit der Reihenfolge der Spaltenbezeichner übereinstimmen, die 29 00:01:56,150 --> 00:02:02,820 Sie hier haben. Der erste Wert, den Sie hier eingeben, wird in den Titel übernommen. ImageUri ist der zweite Wert und so weiter. 30 00:02:02,840 --> 00:02:08,570 Was Sie hier jetzt tun können, ist, dass Sie natürlich Back-Ticks anstelle von einfachen 31 00:02:08,570 --> 00:02:15,970 Anführungszeichen verwenden und dann beispielsweise den Titel hier einfügen und dann ein Komma und dann das imageUri usw. verwenden können. 32 00:02:15,970 --> 00:02:20,270 Sie könnten das tun und es würde funktionieren, aber 33 00:02:20,290 --> 00:02:21,940 das wäre nicht 34 00:02:21,940 --> 00:02:32,350 gut. Dies ist unsicher. Es öffnet eine Tür für ein Angriffsmuster namens SQL Injection, in das Benutzer möglicherweise bösartigen Code einfügen und 35 00:02:32,350 --> 00:02:37,240 andere Abfragen ausführen könnten, die beschädigt werden könnten die Datenbank. 36 00:02:37,240 --> 00:02:42,210 Natürlich in dieser App, in der es sich um eine lokale Datenbank nur auf dem Gerät dieses Benutzers 37 00:02:42,210 --> 00:02:47,830 handelt, ist das vielleicht nicht besonders schlecht, aber wir möchten uns trotzdem dagegen wehren. Deshalb verwenden Sie hier tatsächlich ein paar Platzhalter, 38 00:02:47,850 --> 00:02:52,960 fügen hier Fragezeichen hinzu und Sie benötigen um so viele Fragezeichen hinzuzufügen, wie Sie zur Eingabe von Werten benötigen. 39 00:02:53,050 --> 00:02:58,450 Hier gebe ich also fünf Werte ein, daher habe ich hier fünf durch Kommas getrennte Fragezeichen. 40 00:02:58,540 --> 00:03:03,700 Jetzt werden die konkreten Werte für die Fragezeichen in dem zweiten Argument angegeben, das Sie zur Ausführung 41 00:03:03,700 --> 00:03:07,990 von SQL übergeben, diesem Array von Argumenten. Früher war es leer, jetzt 42 00:03:08,020 --> 00:03:11,860 geben wir die Argumente in der Reihenfolge ein, in 43 00:03:11,860 --> 00:03:19,570 der wir sie benötigen, also zuerst den Titel, dann imageUri usw. Das SQL-Paket tauscht dann diese Fragezeichen gegen unsere 44 00:03:19,810 --> 00:03:27,030 Werte aus, aber nicht bevor wir sie validieren, um sicherzustellen, dass eine solche Injektionsangriff kann nicht passieren. 45 00:03:27,070 --> 00:03:33,050 Mit diesem Ansatz erhalten wir eine zusätzliche automatische Validierung. Dann können wir hier den Titel eingeben. 46 00:03:33,160 --> 00:03:36,040 Das zweite Datenelement war imageUri. Dann benötigen wir 47 00:03:36,280 --> 00:03:37,450 die Adresse, 48 00:03:37,450 --> 00:03:40,210 dann den Breitengrad und dann den Längengrad 49 00:03:40,240 --> 00:03:47,310 So übergeben wir nun unsere Daten an diese Abfrage. Nun, in diesen Erfolgsfunktionen ist, wie ich bereits erwähnte, 50 00:03:47,320 --> 00:03:52,510 das erste Argument immer wie die Wiederholung Ihrer Abfrage, aber das zweite Argument ist 51 00:03:52,510 --> 00:03:56,540 dann entweder der Fehler oder hier das Ergebnis dieser Abfrage, und 52 00:03:56,650 --> 00:04:02,910 hier möchte ich dieses Ergebnis so auflösen, dass an der Stelle, an der Wenn wir Insert Place 53 00:04:02,910 --> 00:04:09,490 aufrufen, können wir dann tatsächlich auf die Lösung des Versprechens hören und unser Ergebnis dieser Abfrage erhalten, die 54 00:04:09,490 --> 00:04:12,640 einige Informationen über den erstellten Datensatz enthalten sollte. 55 00:04:12,650 --> 00:04:18,730 Jetzt können wir also Insert Place aufrufen und natürlich ist der Ort, an dem ich es erneut aufrufen möchte, 56 00:04:18,730 --> 00:04:19,370 meine Places-Aktionsdatei. 57 00:04:19,610 --> 00:04:21,810 Dort verschieben wir das Bild, dort möchte 58 00:04:21,830 --> 00:04:28,700 ich jetzt auch auf meine Datenbank zugreifen und einen Eintrag hinzufügen. Um dies hier zu tun, importieren 59 00:04:28,910 --> 00:04:40,980 wir zunächst diese Methode zum Einfügen von Orten aus dem Ordner "helers" und dort aus der Datenbankdatei und mit dieser importierten Methode nach dem 60 00:04:41,100 --> 00:04:46,450 Lösen unseres Dateisystems und so weiter, hier natürlich auch dann 61 00:04:46,470 --> 00:04:52,290 noch Sie möchten im try catch-Block versuchen, Daten in die Datenbank einzufügen. 62 00:04:52,380 --> 00:04:53,520 Dies kann auch 63 00:04:53,520 --> 00:04:57,600 fehlschlagen, daher ist es nicht die schlechteste Idee, es in einem Try-Block zu haben. 64 00:04:57,630 --> 00:05:03,930 Hier kann ich also Insert Place anrufen und das gibt ein Versprechen zurück, da wir dort unser eigenes Versprechen 65 00:05:03,930 --> 00:05:05,370 haben, also können wir 66 00:05:05,730 --> 00:05:11,460 darauf warten und ich bekomme mein DB-Ergebnis danach zurück, also werde ich dies an einer konstanten Stelle 67 00:05:11,460 --> 00:05:17,200 speichern und jetzt natürlich Insert Place braucht einen Titel, ein imageUri, eine Adresse, einen Breiten- und Längengrad. 68 00:05:17,270 --> 00:05:19,960 Deshalb werde ich jetzt meinen Titel weiterleiten, den ich 69 00:05:19,960 --> 00:05:27,240 bereits habe, ich werde den neuen Pfad weiterleiten, der mein imageUri ist, und jetzt für die Adresse werde ich eine Dummy-Adresse verwenden, da wir noch 70 00:05:27,240 --> 00:05:29,700 keine echte Adresse haben. Für den Breitengrad 71 00:05:29,700 --> 00:05:35,760 verwende ich eine Dummy-Nummer von 15. 6 und für die Länge sagen wir 12. 3. 72 00:05:35,760 --> 00:05:39,750 Nun, das könnte mitten im Ozean sein, ich weiß es nicht, aber zumindest 73 00:05:39,780 --> 00:05:45,730 haben wir hier einige Koordinaten, die wir vorerst verwenden können, bis wir in der Lage sind, einen realen Ort zu finden. 74 00:05:45,750 --> 00:05:51,960 Jetzt ist dieses DB-Ergebnis natürlich interessant. Lassen Sie uns es also auf der Konsole protokollieren und im Übrigen sicherstellen, dass 75 00:05:51,960 --> 00:05:57,730 wir diese Aktion nur auslösen und daher unseren Redux-Speicher berühren, wenn wir sowohl mit dem Dateisystem als auch 76 00:05:57,730 --> 00:06:00,330 mit der Datenbankaktion erfolgreich waren Versuchen Sie 77 00:06:00,330 --> 00:06:06,690 es mit Block und schauen wir uns das jetzt an. Jetzt sollten wir in der Lage sein, Daten in 78 00:06:06,690 --> 00:06:07,740 der Datenbank 79 00:06:07,770 --> 00:06:11,790 zu speichern. Testen wir dies also auf Android, wo wir ein 80 00:06:11,790 --> 00:06:14,240 Bild aufnehmen können. Dies ist ein Test. 81 00:06:14,270 --> 00:06:24,980 Lassen Sie uns hier ein Bild aufnehmen und sehen, ob all das funktioniert, indem Sie das Bild jetzt zuschneiden und diesen Ort speichern. 82 00:06:25,090 --> 00:06:26,280 Dies funktioniert und 83 00:06:26,380 --> 00:06:31,380 hier sehen wir einige Ausgaben. Wir sehen, dass dies das Ergebnis unserer Datenbankaktion ist. Wir sehen, 84 00:06:31,480 --> 00:06:37,000 dass eine Zeile betroffen war, weil eine Zeile eingefügt wurde, und wir erhalten auch die ID zurück, 85 00:06:37,000 --> 00:06:38,460 die automatisch erstellt wurde. 86 00:06:38,500 --> 00:06:41,710 Hier handelt es sich um eine numerische ID, aber das 87 00:06:41,710 --> 00:06:47,920 ist natürlich kein Problem. Daher können wir diese ID jetzt auch in unserem Reduzierer verwenden, anstatt diese Status-Snapshot-ID hier 88 00:06:47,920 --> 00:06:49,060 manuell zu erstellen. 89 00:06:49,060 --> 00:06:51,520 Das ist also eine winzige Verbesserung. 90 00:06:51,520 --> 00:06:59,600 Wenn wir unsere Aktion hier in den Ortsdaten versenden, möchte ich jetzt auch die ID angeben und diese ID kann aus der 91 00:06:59,600 --> 00:07:06,170 DB-Ergebniskonstante abgerufen werden. Dort befindet sie sich hier im Feld ID einfügen, wie Sie sehen können Lassen 92 00:07:06,170 --> 00:07:13,000 Sie uns hier auf die ID zum Einfügen zugreifen. Jetzt im Reduzierer müssen wir es also nicht mehr so generieren, sondern können 93 00:07:13,000 --> 00:07:17,330 hier einfach auf Aktion verweisen. placeData. Ich würde. 94 00:07:17,330 --> 00:07:22,100 Denken Sie jetzt daran, dass es eine Nummer ist. Hier möchte ich eigentlich eine Zeichenfolge 95 00:07:22,100 --> 00:07:28,760 haben, obwohl Sie auch eine Nummer behalten könnten, aber ich werde sie hier in eine Zeichenfolge konvertieren. Damit verwenden wir jetzt auch 96 00:07:28,760 --> 00:07:34,850 diese ID, die wir speichern es in der Datenbank. Natürlich wäre es jetzt schön, alle unsere Daten zu laden, wenn unsere App neu 97 00:07:34,850 --> 00:07:37,580 gestartet wird, denn gerade jetzt, wenn sie neu gestartet wird, gehen die 98 00:07:37,700 --> 00:07:39,950 Daten immer noch verloren, sie gehen nicht wirklich verloren, es 99 00:07:39,950 --> 00:07:45,230 ist keine Datenbank, aber wir sehen sie hier nicht, weil wir Laden Sie dies nicht in unseren Redux-Store. Dies sind natürlich die Daten, die 100 00:07:45,230 --> 00:07:46,640 wir in der laufenden App verwenden. 101 00:07:46,940 --> 00:07:50,840 Wir müssen also sicherstellen, dass wir die Daten beim Start dieser App in den Redux-Store laden.