Stellen wir nach der Initialisierung der Datenbank sicher, dass wir dort Daten speichern können.
Also zurück in die Datenbank. js-Datei im Ordner "helers" können wir eine neue Konstante hinzufügen, beispielsweise einen
Ort einfügen, den ich
exportiere, und jetzt möchte ich hier den Titel des Ortes erhalten, ich möchte die imageUri erhalten, ich möchte die Adresse und
auch eine Breiten- und Längengrad, also möchte ich alle Daten abrufen, aus denen ein Ort besteht, und dort
möchte ich nun den Ort in die Datenbank einfügen. Dafür verwenden wir die gleiche Syntax wie hier,
damit ich diese einfach kopieren kann, da ich hier auch ein Versprechen als Wrapper haben möchte, damit ich sie
dann bequem verwenden und an der Stelle, an der ich Insert Place anrufe, abfangen oder asynchron warten
kann Aber natürlich ist die Abfrage, die ich jetzt ausführe, anders.
Anstatt eine Tabelle zu erstellen, möchte ich jetzt Daten
in die Tabelle einfügen, und das geschieht mit dem Befehl Einfügen in.
Jetzt müssen Sie die Tabelle und die Stellen angeben und dann zwischen Klammern die Felder, auf die Sie dort abzielen
möchten, und
natürlich möchte ich alle Felder mit Ausnahme der ID als Ziel festlegen, da diese, wie bereits erwähnt, automatisch generiert
werden, was sehr praktisch ist
Natürlich, aber ich möchte auf mein Titelfeld abzielen und jetzt müssen Sie sicherstellen, dass Sie mit den Namen
übereinstimmen, die Sie dort für Ihre Spalten
eingerichtet haben. Sie müssen diese Namen jetzt hier abgleichen.
Die Reihenfolge muss nicht dieselbe sein, aber die Benennung ist wichtig, also möchte ich
den Titel als Ziel auswählen, das imageUri, das ist
auch ein Name, den ich dort oben gewählt habe, oder?
Also imageUri, Adresse, Breite und
Länge und jetzt
müssen wir angeben, welche Werte dort hineingehen sollen.
Sie tun dies, indem Sie das Schlüsselwort values hier nach dieser Liste von Spalten hinzufügen, auf die Sie abzielen möchten.
Jetzt haben Sie hier ein weiteres Klammerpaar, in dem Sie die Werte angeben, die in jede dieser Spalten aufgenommen
werden sollen.
Jetzt muss die Reihenfolge der Werte hier natürlich mit der Reihenfolge der Spaltenbezeichner übereinstimmen, die
Sie hier haben. Der erste Wert, den Sie hier eingeben, wird in den Titel übernommen. ImageUri ist der zweite Wert und so weiter.
Was Sie hier jetzt tun können, ist, dass Sie natürlich Back-Ticks anstelle von einfachen
Anführungszeichen verwenden und dann beispielsweise den Titel hier einfügen und dann ein Komma und dann das imageUri usw. verwenden können.
Sie könnten das tun und es würde funktionieren, aber
das wäre nicht
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
andere Abfragen ausführen könnten, die beschädigt werden könnten die Datenbank.
Natürlich in dieser App, in der es sich um eine lokale Datenbank nur auf dem Gerät dieses Benutzers
handelt, ist das vielleicht nicht besonders schlecht, aber wir möchten uns trotzdem dagegen wehren. Deshalb verwenden Sie hier tatsächlich ein paar Platzhalter,
fügen hier Fragezeichen hinzu und Sie benötigen um so viele Fragezeichen hinzuzufügen, wie Sie zur Eingabe von Werten benötigen.
Hier gebe ich also fünf Werte ein, daher habe ich hier fünf durch Kommas getrennte Fragezeichen.
Jetzt werden die konkreten Werte für die Fragezeichen in dem zweiten Argument angegeben, das Sie zur Ausführung
von SQL übergeben, diesem Array von Argumenten. Früher war es leer, jetzt
geben wir die Argumente in der Reihenfolge ein, in
der wir sie benötigen, also zuerst den Titel, dann imageUri usw. Das SQL-Paket tauscht dann diese Fragezeichen gegen unsere
Werte aus, aber nicht bevor wir sie validieren, um sicherzustellen, dass eine solche Injektionsangriff kann nicht passieren.
Mit diesem Ansatz erhalten wir eine zusätzliche automatische Validierung. Dann können wir hier den Titel eingeben.
Das zweite Datenelement war imageUri. Dann benötigen wir
die Adresse,
dann den Breitengrad und dann den Längengrad
So übergeben wir nun unsere Daten an diese Abfrage. Nun, in diesen Erfolgsfunktionen ist, wie ich bereits erwähnte,
das erste Argument immer wie die Wiederholung Ihrer Abfrage, aber das zweite Argument ist
dann entweder der Fehler oder hier das Ergebnis dieser Abfrage, und
hier möchte ich dieses Ergebnis so auflösen, dass an der Stelle, an der Wenn wir Insert Place
aufrufen, können wir dann tatsächlich auf die Lösung des Versprechens hören und unser Ergebnis dieser Abfrage erhalten, die
einige Informationen über den erstellten Datensatz enthalten sollte.
Jetzt können wir also Insert Place aufrufen und natürlich ist der Ort, an dem ich es erneut aufrufen möchte,
meine Places-Aktionsdatei.
Dort verschieben wir das Bild, dort möchte
ich jetzt auch auf meine Datenbank zugreifen und einen Eintrag hinzufügen. Um dies hier zu tun, importieren
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
Lösen unseres Dateisystems und so weiter, hier natürlich auch dann
noch Sie möchten im try catch-Block versuchen, Daten in die Datenbank einzufügen.
Dies kann auch
fehlschlagen, daher ist es nicht die schlechteste Idee, es in einem Try-Block zu haben.
Hier kann ich also Insert Place anrufen und das gibt ein Versprechen zurück, da wir dort unser eigenes Versprechen
haben, also können wir
darauf warten und ich bekomme mein DB-Ergebnis danach zurück, also werde ich dies an einer konstanten Stelle
speichern und jetzt natürlich Insert Place braucht einen Titel, ein imageUri, eine Adresse, einen Breiten- und Längengrad.
Deshalb werde ich jetzt meinen Titel weiterleiten, den ich
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
keine echte Adresse haben. Für den Breitengrad
verwende ich eine Dummy-Nummer von 15. 6 und für die Länge sagen wir 12. 3.
Nun, das könnte mitten im Ozean sein, ich weiß es nicht, aber zumindest
haben wir hier einige Koordinaten, die wir vorerst verwenden können, bis wir in der Lage sind, einen realen Ort zu finden.
Jetzt ist dieses DB-Ergebnis natürlich interessant. Lassen Sie uns es also auf der Konsole protokollieren und im Übrigen sicherstellen, dass
wir diese Aktion nur auslösen und daher unseren Redux-Speicher berühren, wenn wir sowohl mit dem Dateisystem als auch
mit der Datenbankaktion erfolgreich waren Versuchen Sie
es mit Block und schauen wir uns das jetzt an. Jetzt sollten wir in der Lage sein, Daten in
der Datenbank
zu speichern. Testen wir dies also auf Android, wo wir ein
Bild aufnehmen können. Dies ist ein Test.
Lassen Sie uns hier ein Bild aufnehmen und sehen, ob all das funktioniert, indem Sie das Bild jetzt zuschneiden und diesen Ort speichern.
Dies funktioniert und
hier sehen wir einige Ausgaben. Wir sehen, dass dies das Ergebnis unserer Datenbankaktion ist. Wir sehen,
dass eine Zeile betroffen war, weil eine Zeile eingefügt wurde, und wir erhalten auch die ID zurück,
die automatisch erstellt wurde.
Hier handelt es sich um eine numerische ID, aber das
ist natürlich kein Problem. Daher können wir diese ID jetzt auch in unserem Reduzierer verwenden, anstatt diese Status-Snapshot-ID hier
manuell zu erstellen.
Das ist also eine winzige Verbesserung.
Wenn wir unsere Aktion hier in den Ortsdaten versenden, möchte ich jetzt auch die ID angeben und diese ID kann aus der
DB-Ergebniskonstante abgerufen werden. Dort befindet sie sich hier im Feld ID einfügen, wie Sie sehen können Lassen
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
hier einfach auf Aktion verweisen. placeData. Ich würde.
Denken Sie jetzt daran, dass es eine Nummer ist. Hier möchte ich eigentlich eine Zeichenfolge
haben, obwohl Sie auch eine Nummer behalten könnten, aber ich werde sie hier in eine Zeichenfolge konvertieren. Damit verwenden wir jetzt auch
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
gestartet wird, denn gerade jetzt, wenn sie neu gestartet wird, gehen die
Daten immer noch verloren, sie gehen nicht wirklich verloren, es
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
wir in der laufenden App verwenden.
Wir müssen also sicherstellen, dass wir die Daten beim Start dieser App in den Redux-Store laden.