Więc zanurzmy się w SQLite. Ponownie otrzymaliśmy moduł
obsługiwany przez expo, który instalujemy tak samo, jak instalowaliśmy również inne natywne moduły,
a
teraz tylko kilka krótkich słów o SQLite. SQLite to system bazy danych, który można powiedzieć, że
jest dostępny zarówno na iOS, jak i na Androidzie, więc możesz szybko
skonfigurować tam taką bazę danych, dzięki temu modułowi będzie to bardzo łatwe, a następnie możesz użyć składni SQL, podstawowej składni SQL do
uruchamiania zapytań dla tej bazy danych.
Teraz nie zagłębię się tutaj głęboko w składnię SQL, ponieważ oczywiście nie jest to kurs
SQL, ale aby dowiedzieć się wszystkiego
o tym, jak z niego korzystać, oczywiście sprawdź oficjalne dokumenty i załączyłeś również link z bardziej szczegółowym fragmentem, który nurkuje na temat korzystania
z pakietu SQLite w aplikacji expo, w której można znaleźć więcej przykładów usuwania rzeczy
itp. Znajdziesz także odwołanie do SQLite dla SQLite, w którym możesz dowiedzieć się więcej
o składni SQL.
Pokażę teraz podstawową składnię w tym module,
ale dla wszystkich rzeczy, które możesz zrobić w swoich zapytaniach, dla
wszystkich poleceń, które możesz wykonać, zdecydowanie sprawdź te zasoby. Teraz dodajmy SQLite, uruchamiając expo install expo-sqlite w
naszym projekcie, który zainstaluje to w naszym projekcie tutaj i będzie działać tak jak wcześniej,
nie jest wymagana żadna dodatkowa konfiguracja,
a po zakończeniu instalacji możemy zacznij pracować z SQLite.
Teraz praca z bazą danych obejmuje kilka rzeczy, na
przykład musisz otworzyć połączenie z bazą danych, a jeśli baza danych jeszcze nie istnieje, co
ma miejsce w przypadku pierwszego dostępu do niej w trakcie życia aplikacji, utworzy ona również
tę bazę danych a po nawiązaniu połączenia z utworzoną bazą danych możesz oczywiście
uruchamiać zapytania.
W tym celu dodam folder pomocników z db. Jest tam plik js, którego nie
trzeba robić, ale chcę mieć logikę bazy danych, aby pozostałe moje pliki pozostały szczupłe i że mam
jeden plik, w którym możemy zobaczyć całą logikę bazy danych. Teraz możemy zaimportować SQLite z pakietu i, jak widać,
składnia importu jest teraz nieco inna niż w przypadku innych pakietów.
Zamiast importować gwiazdę jako SQLite z tego pakietu, instalujemy go tutaj z tą nazwaną składnią
importu, poza
tym, jest nadal bardzo podobny
i teraz możemy zacząć używać tego pakietu tutaj.
Teraz przede wszystkim utworzę stałą db, która zawiera odniesienie do mojej bazy danych, którą otrzymuję, uruchamiając
otwartą bazę danych SQLite i tam przekazujemy nazwę bazy
danych, która może być miejscami. db.
Teraz to się połączy z bazą danych lub utworzy bazę danych, jeśli nie będzie w stanie jej znaleźć,
więc kiedy uruchomiliśmy aplikację po raz pierwszy i nie trzeba nic więcej robić, aby uzyskać dostęp do bazy danych,
więc to bardzo trywialne.
Teraz ta linia kodu będzie wykonywana za każdym razem, gdy wykonamy ten plik, co skutecznie dzieje się,
gdy pierwszy raz importujemy ten plik w dowolnym miejscu.
Teraz chcę również dodać tutaj funkcję init przechowywaną w stałej, którą robię, aby zainicjować
tę bazę danych i wyeksportuję tę funkcję jako nazwany eksport.
Teraz w tej funkcji chcę się upewnić, że tworzymy tabelę podstawową, ponieważ bazy danych SQL współpracują z tabelami,
które przechowują twoje rekordy, a rekordy są w zasadzie wierszami danych, które dodajesz do swojej tabeli.
Teraz początkowo, kiedy tworzymy bazę danych, jest pusta, ale do przechowywania miejsc potrzebujemy tabeli, która
może pomieścić te miejsca.
Więc chcę mieć tutaj funkcję inicjującą, która faktycznie utworzy tę tabelę, jeśli jeszcze nie
istnieje.
Więc mogę użyć mojej stałej db, która wskazuje na tę bazę danych i uruchomić transakcję. Teraz transakcja jest metodą oferowaną przez pakiet SQLite
w bazie danych, a wszystko to znajdziesz oczywiście w oficjalnych dokumentach, a
ta metoda
transakcji przyjmuje funkcję jako argument, który daje ci dostęp do obiektu transakcji,
który dla ciebie tworzy.
Pojęcie transakcji jest po prostu pojęciem, w którym ten pakiet ostatecznie gwarantuje, że twoje zapytanie jest zawsze
wykonywane jako całość i że jeśli jakaś część zapytania zakończy się niepowodzeniem, całe zapytanie jest
wycofywane, abyś nie mógł z uszkodzonymi danymi w
bazie danych, dlatego faktycznie zawijasz każde zapytanie w takiej transakcji.
To tworzy transakcję lub inicjuje transakcję, a następnie daje ci dostęp do tego obiektu
transakcji tutaj w tej funkcji, która zostanie dla Ciebie wykonana.
Tak więc tutaj możemy teraz użyć tego obiektu transakcji do wykonania zapytania SQL
za pomocą
metody wykonania SQL, co również jest tutaj udokumentowane. Więc uruchom SQL bierze teraz ciąg, który opisuje twoje zapytanie SQL i
jest to część, w której możesz zanurzyć się w tym
dokumencie SQL, o którym wspomniałem wcześniej, gdzie możesz dowiedzieć się wszystkiego o języku SQL.
Teraz chcę utworzyć tutaj tabelę, którą wykonujemy za pomocą polecenia create table i
nie trzeba tego
pisać wielkimi literami, po prostu robię to, aby wyjaśnić, że są to standardowe polecenia wbudowane w język SQL i
chcę
stwórz tabelę, jeśli nie istnieje, co robimy z ograniczeniem, jeśli nie istnieje tutaj, a teraz nazwą
tabeli będą miejsca, małe
litery, teraz to moja własna dynamiczna
rzecz tutaj, właśnie chcę ją nazwać miejscami, a teraz pomiędzy w nawiasach konfigurujesz zawartość
tabeli, a następnie możesz dodać średnik.
Więc teraz definiujemy różne pola, które chcemy mieć w tej tabeli, różne
kolumny, że tak powiem, i chcę mieć kolumnę identyfikatora, a ja ustawię to na liczbę całkowitą typu, która jest jednym
z obsługiwanych typów danych w
SQL i będzie to klucz podstawowy, co oznacza, że będzie również musiał być unikalny, nie możesz
mieć tego samego identyfikatora dwa razy i automatycznie wygeneruje ten identyfikator dla ciebie, co
jest bardzo wygodne i nie powinno być
puste, więc dodanie pusta wartość nie będzie dozwolona. Teraz przecinkiem możemy dodać następną
kolumnę, którą chcemy mieć i będzie to mój tytuł.
Teraz tytuł powinien być tekstem, a jeśli chcesz, możesz również dodać wartość null, wszystkie moje dane
nie powinny mieć wartości null.
Teraz oprócz tytułu chcę również przechowywać imageUri, a także tekst, który nie
jest pusty.
Jest to oczywiście tekst, a nie plik lub coś w tym rodzaju, ponieważ
nie przechowujemy pliku w bazie danych, przechowujemy ścieżkę do pliku w bazie
danych, który jest ciągiem, a teraz czegoś innego będziemy potrzebować później, Chcę również skonfigurować mój adres, który
jest tekstem, który powinien być ciągiem opisującym adres miejsca i pole szerokości geograficznej lub po prostu lat, który jest rzeczywisty,
który jest liczbą zmiennoprzecinkową na końcu i długość geograficzna tutaj w skrócie lng, która jest również rzeczywista i nie
są one zerowe.
Teraz nie pobieramy jeszcze lokalizacji, ale zrobimy to później i podamy lokalizację
jako kombinację szerokości i długości geograficznej, która jest standardowym sposobem wyrażania punktów na świecie.
Tworzy to teraz taką tabelę, jeśli jeszcze nie istnieje.
Teraz metoda wykonania SQL przyjmuje również drugi argument, który jest tablicą argumentów, które pojawią się później, których
nie potrzebujemy jeszcze, byłyby to argumenty
dynamiczne, które można wprowadzić do tego zapytania, ale nie potrzebujemy tego tutaj
i mamy tutaj dwie funkcje jako argument trzeci i czwarty. Pierwszą funkcją, którą przekazujemy, jest funkcja sukcesu,
która jest wykonywana,
jeśli polecenie to się powiedzie.
Drugi argument to funkcja błędu, która jest wykonywana, jeśli to się nie powiedzie.
Teraz pierwszy argument do każdej funkcji tutaj i te funkcje są oczywiście wykonywane w twoim
imieniu przez pakiet
SQL, więc te funkcje zawsze jako pierwszy argument uzyskują w zasadzie wykonane
zapytanie i dodając tutaj podkreślenie jako nazwę, sygnalizuję, że Nie dbam
o to, ale interesuje mnie drugi
argument i tutaj byłby to mój błąd, a teraz, aby uczynić go użytecznym w łatwy sposób, właściwie zawinę to w obietnicę niestandardową.
Więc tutaj utworzę obietnicę, używając nowej obietnicy, obietnic wbudowanych w JavaScript i obsługiwanych przez wersję JavaScript React
Native używa i obietnica przyjmuje funkcję, która przyjmuje argument i funkcję odrzucenia jako argument, a teraz możemy
przenieść tę bazę
danych kod transakcji tam, a w przypadku powodzenia, nazywam rozwiązać, co oznacza, że zewnętrzna obietnica zostanie
rozwiązana, w przypadku błędu, nazywam odrzucenie i przekazuję mój błąd tutaj, a
następnie mogę zwrócić obietnicę tutaj ogólnie w mojej metodzie
init i teraz mogę wywołać metodę init z innych miejsc w aplikacji i otrzymuję obietnicę,
która zostanie rozwiązana, jeśli uda nam się zainicjować bazę danych, czyli
przy tworzeniu tabeli lub jeśli napotkamy błąd. Nawiasem mówiąc, jeśli żadna tabela nie zostanie utworzona,
ponieważ już istnieje, nie otrzymamy błędu, ale nadal będziemy w stanie powodzenia. Dzięki temu nadal nie przechowujemy niczego w bazie
danych, ale konfigurujemy bazę danych.
Upewnijmy się teraz, że nazywamy się init, i oczywiście miejscem, w którym można to nazwać, jest aplikacja. plik js, ponieważ chcemy
zainicjować bazę danych tak szybko,
jak to możliwe po uruchomieniu naszej aplikacji. Więc zaimportuję coś z mojego folderu pomocników tam, z pliku bazy danych, a to jest coś,
co nie dziwi, a więc tutaj, kiedy ta aplikacja. Plik js jest wykonywany, gdy
inicjalizujemy również magazyn Redux i tak dalej, chcę wywołać init tutaj, a teraz init jest
albo udany, albo nie, więc na razie dodam blok wtedy, w którym mówię, że baza danych zainicjowała dziennik
konsoli,
więc to jest przypadek sukcesu lub blok przechwytywania, w którym pojawia się potencjalny błąd, w którym konsola logowania
inicjuje db nie powiodła się, a następnie konsola loguje otrzymany błąd. A jeśli teraz to zapiszemy, powinieneś zobaczyć tutaj w zainicjowanej bazie danych
dziennika, która jest wyjściem z iPhone'a, a teraz, gdy uruchomiła się na Androidzie, zobaczysz
ją również dla Androida.
Więc to działa, a teraz mamy bazę danych zainicjowaną, czas dodać teraz więcej metod, aby upewnić się, że możemy
również wstawiać dane, a później oczywiście również pobierać dane.