1 00:00:02,100 --> 00:00:05,240 Więc zanurzmy się w SQLite. Ponownie otrzymaliśmy moduł 2 00:00:05,300 --> 00:00:11,100 obsługiwany przez expo, który instalujemy tak samo, jak instalowaliśmy również inne natywne moduły, 3 00:00:11,130 --> 00:00:12,120 a 4 00:00:12,120 --> 00:00:18,570 teraz tylko kilka krótkich słów o SQLite. SQLite to system bazy danych, który można powiedzieć, że 5 00:00:18,570 --> 00:00:22,840 jest dostępny zarówno na iOS, jak i na Androidzie, więc możesz szybko 6 00:00:22,860 --> 00:00:30,240 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 7 00:00:30,570 --> 00:00:32,860 uruchamiania zapytań dla tej bazy danych. 8 00:00:32,940 --> 00:00:39,030 Teraz nie zagłębię się tutaj głęboko w składnię SQL, ponieważ oczywiście nie jest to kurs 9 00:00:39,030 --> 00:00:41,730 SQL, ale aby dowiedzieć się wszystkiego 10 00:00:41,730 --> 00:00:50,880 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 11 00:00:50,880 --> 00:00:56,550 z pakietu SQLite w aplikacji expo, w której można znaleźć więcej przykładów usuwania rzeczy 12 00:00:56,550 --> 00:01:02,460 itp. Znajdziesz także odwołanie do SQLite dla SQLite, w którym możesz dowiedzieć się więcej 13 00:01:02,460 --> 00:01:03,990 o składni SQL. 14 00:01:03,990 --> 00:01:06,630 Pokażę teraz podstawową składnię w tym module, 15 00:01:06,720 --> 00:01:10,360 ale dla wszystkich rzeczy, które możesz zrobić w swoich zapytaniach, dla 16 00:01:10,470 --> 00:01:17,170 wszystkich poleceń, które możesz wykonać, zdecydowanie sprawdź te zasoby. Teraz dodajmy SQLite, uruchamiając expo install expo-sqlite w 17 00:01:17,170 --> 00:01:24,010 naszym projekcie, który zainstaluje to w naszym projekcie tutaj i będzie działać tak jak wcześniej, 18 00:01:24,010 --> 00:01:27,250 nie jest wymagana żadna dodatkowa konfiguracja, 19 00:01:28,510 --> 00:01:32,720 a po zakończeniu instalacji możemy zacznij pracować z SQLite. 20 00:01:32,830 --> 00:01:35,750 Teraz praca z bazą danych obejmuje kilka rzeczy, na 21 00:01:35,770 --> 00:01:41,020 przykład musisz otworzyć połączenie z bazą danych, a jeśli baza danych jeszcze nie istnieje, co 22 00:01:41,020 --> 00:01:46,260 ma miejsce w przypadku pierwszego dostępu do niej w trakcie życia aplikacji, utworzy ona również 23 00:01:46,450 --> 00:01:51,070 tę bazę danych a po nawiązaniu połączenia z utworzoną bazą danych możesz oczywiście 24 00:01:51,070 --> 00:01:52,090 uruchamiać zapytania. 25 00:01:52,090 --> 00:01:57,310 W tym celu dodam folder pomocników z db. Jest tam plik js, którego nie 26 00:01:57,310 --> 00:02:03,220 trzeba robić, ale chcę mieć logikę bazy danych, aby pozostałe moje pliki pozostały szczupłe i że mam 27 00:02:03,220 --> 00:02:10,210 jeden plik, w którym możemy zobaczyć całą logikę bazy danych. Teraz możemy zaimportować SQLite z pakietu i, jak widać, 28 00:02:10,290 --> 00:02:13,810 składnia importu jest teraz nieco inna niż w przypadku innych pakietów. 29 00:02:13,980 --> 00:02:19,320 Zamiast importować gwiazdę jako SQLite z tego pakietu, instalujemy go tutaj z tą nazwaną składnią 30 00:02:19,320 --> 00:02:20,300 importu, poza 31 00:02:20,310 --> 00:02:22,180 tym, jest nadal bardzo podobny 32 00:02:22,500 --> 00:02:25,110 i teraz możemy zacząć używać tego pakietu tutaj. 33 00:02:25,260 --> 00:02:31,080 Teraz przede wszystkim utworzę stałą db, która zawiera odniesienie do mojej bazy danych, którą otrzymuję, uruchamiając 34 00:02:31,080 --> 00:02:34,290 otwartą bazę danych SQLite i tam przekazujemy nazwę bazy 35 00:02:34,290 --> 00:02:39,020 danych, która może być miejscami. db. 36 00:02:39,060 --> 00:02:43,980 Teraz to się połączy z bazą danych lub utworzy bazę danych, jeśli nie będzie w stanie jej znaleźć, 37 00:02:44,010 --> 00:02:48,990 więc kiedy uruchomiliśmy aplikację po raz pierwszy i nie trzeba nic więcej robić, aby uzyskać dostęp do bazy danych, 38 00:02:49,080 --> 00:02:50,370 więc to bardzo trywialne. 39 00:02:50,380 --> 00:02:55,110 Teraz ta linia kodu będzie wykonywana za każdym razem, gdy wykonamy ten plik, co skutecznie dzieje się, 40 00:02:55,170 --> 00:02:57,870 gdy pierwszy raz importujemy ten plik w dowolnym miejscu. 41 00:02:57,990 --> 00:03:04,320 Teraz chcę również dodać tutaj funkcję init przechowywaną w stałej, którą robię, aby zainicjować 42 00:03:04,320 --> 00:03:08,890 tę bazę danych i wyeksportuję tę funkcję jako nazwany eksport. 43 00:03:08,910 --> 00:03:15,300 Teraz w tej funkcji chcę się upewnić, że tworzymy tabelę podstawową, ponieważ bazy danych SQL współpracują z tabelami, 44 00:03:15,300 --> 00:03:21,450 które przechowują twoje rekordy, a rekordy są w zasadzie wierszami danych, które dodajesz do swojej tabeli. 45 00:03:21,450 --> 00:03:27,420 Teraz początkowo, kiedy tworzymy bazę danych, jest pusta, ale do przechowywania miejsc potrzebujemy tabeli, która 46 00:03:27,420 --> 00:03:29,200 może pomieścić te miejsca. 47 00:03:29,220 --> 00:03:35,190 Więc chcę mieć tutaj funkcję inicjującą, która faktycznie utworzy tę tabelę, jeśli jeszcze nie 48 00:03:35,190 --> 00:03:35,900 istnieje. 49 00:03:36,690 --> 00:03:44,780 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 50 00:03:44,790 --> 00:03:50,220 w bazie danych, a wszystko to znajdziesz oczywiście w oficjalnych dokumentach, a 51 00:03:50,220 --> 00:03:51,560 ta metoda 52 00:03:51,780 --> 00:03:57,570 transakcji przyjmuje funkcję jako argument, który daje ci dostęp do obiektu transakcji, 53 00:03:57,660 --> 00:03:59,620 który dla ciebie tworzy. 54 00:03:59,750 --> 00:04:06,870 Pojęcie transakcji jest po prostu pojęciem, w którym ten pakiet ostatecznie gwarantuje, że twoje zapytanie jest zawsze 55 00:04:06,870 --> 00:04:13,200 wykonywane jako całość i że jeśli jakaś część zapytania zakończy się niepowodzeniem, całe zapytanie jest 56 00:04:13,200 --> 00:04:17,340 wycofywane, abyś nie mógł z uszkodzonymi danymi w 57 00:04:17,340 --> 00:04:21,670 bazie danych, dlatego faktycznie zawijasz każde zapytanie w takiej transakcji. 58 00:04:21,750 --> 00:04:26,760 To tworzy transakcję lub inicjuje transakcję, a następnie daje ci dostęp do tego obiektu 59 00:04:26,790 --> 00:04:30,830 transakcji tutaj w tej funkcji, która zostanie dla Ciebie wykonana. 60 00:04:30,840 --> 00:04:37,890 Tak więc tutaj możemy teraz użyć tego obiektu transakcji do wykonania zapytania SQL 61 00:04:37,890 --> 00:04:39,450 za pomocą 62 00:04:39,450 --> 00:04:48,260 metody wykonania SQL, co również jest tutaj udokumentowane. Więc uruchom SQL bierze teraz ciąg, który opisuje twoje zapytanie SQL i 63 00:04:48,530 --> 00:04:52,500 jest to część, w której możesz zanurzyć się w tym 64 00:04:52,520 --> 00:04:57,450 dokumencie SQL, o którym wspomniałem wcześniej, gdzie możesz dowiedzieć się wszystkiego o języku SQL. 65 00:04:57,560 --> 00:05:02,840 Teraz chcę utworzyć tutaj tabelę, którą wykonujemy za pomocą polecenia create table i 66 00:05:02,870 --> 00:05:03,980 nie trzeba tego 67 00:05:03,980 --> 00:05:11,600 pisać wielkimi literami, po prostu robię to, aby wyjaśnić, że są to standardowe polecenia wbudowane w język SQL i 68 00:05:11,600 --> 00:05:12,590 chcę 69 00:05:12,590 --> 00:05:19,130 stwórz tabelę, jeśli nie istnieje, co robimy z ograniczeniem, jeśli nie istnieje tutaj, a teraz nazwą 70 00:05:19,130 --> 00:05:20,750 tabeli będą miejsca, małe 71 00:05:20,750 --> 00:05:23,300 litery, teraz to moja własna dynamiczna 72 00:05:23,360 --> 00:05:28,760 rzecz tutaj, właśnie chcę ją nazwać miejscami, a teraz pomiędzy w nawiasach konfigurujesz zawartość 73 00:05:28,760 --> 00:05:31,110 tabeli, a następnie możesz dodać średnik. 74 00:05:31,130 --> 00:05:35,420 Więc teraz definiujemy różne pola, które chcemy mieć w tej tabeli, różne 75 00:05:35,450 --> 00:05:42,380 kolumny, że tak powiem, i chcę mieć kolumnę identyfikatora, a ja ustawię to na liczbę całkowitą typu, która jest jednym 76 00:05:42,380 --> 00:05:44,660 z obsługiwanych typów danych w 77 00:05:44,660 --> 00:05:50,360 SQL i będzie to klucz podstawowy, co oznacza, że będzie również musiał być unikalny, nie możesz 78 00:05:50,360 --> 00:05:55,400 mieć tego samego identyfikatora dwa razy i automatycznie wygeneruje ten identyfikator dla ciebie, co 79 00:05:55,400 --> 00:05:57,880 jest bardzo wygodne i nie powinno być 80 00:05:57,890 --> 00:06:03,680 puste, więc dodanie pusta wartość nie będzie dozwolona. Teraz przecinkiem możemy dodać następną 81 00:06:03,680 --> 00:06:08,030 kolumnę, którą chcemy mieć i będzie to mój tytuł. 82 00:06:08,030 --> 00:06:14,460 Teraz tytuł powinien być tekstem, a jeśli chcesz, możesz również dodać wartość null, wszystkie moje dane 83 00:06:14,670 --> 00:06:17,200 nie powinny mieć wartości null. 84 00:06:17,670 --> 00:06:22,860 Teraz oprócz tytułu chcę również przechowywać imageUri, a także tekst, który nie 85 00:06:22,860 --> 00:06:24,110 jest pusty. 86 00:06:24,120 --> 00:06:28,950 Jest to oczywiście tekst, a nie plik lub coś w tym rodzaju, ponieważ 87 00:06:29,220 --> 00:06:34,020 nie przechowujemy pliku w bazie danych, przechowujemy ścieżkę do pliku w bazie 88 00:06:34,020 --> 00:06:40,530 danych, który jest ciągiem, a teraz czegoś innego będziemy potrzebować później, Chcę również skonfigurować mój adres, który 89 00:06:40,530 --> 00:06:47,760 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, 90 00:06:47,760 --> 00:06:54,990 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 91 00:06:55,050 --> 00:06:56,330 są one zerowe. 92 00:06:56,340 --> 00:07:03,090 Teraz nie pobieramy jeszcze lokalizacji, ale zrobimy to później i podamy lokalizację 93 00:07:03,090 --> 00:07:10,080 jako kombinację szerokości i długości geograficznej, która jest standardowym sposobem wyrażania punktów na świecie. 94 00:07:10,110 --> 00:07:14,150 Tworzy to teraz taką tabelę, jeśli jeszcze nie istnieje. 95 00:07:14,150 --> 00:07:20,130 Teraz metoda wykonania SQL przyjmuje również drugi argument, który jest tablicą argumentów, które pojawią się później, których 96 00:07:20,130 --> 00:07:22,500 nie potrzebujemy jeszcze, byłyby to argumenty 97 00:07:22,590 --> 00:07:26,850 dynamiczne, które można wprowadzić do tego zapytania, ale nie potrzebujemy tego tutaj 98 00:07:27,120 --> 00:07:33,810 i mamy tutaj dwie funkcje jako argument trzeci i czwarty. Pierwszą funkcją, którą przekazujemy, jest funkcja sukcesu, 99 00:07:33,810 --> 00:07:35,790 która jest wykonywana, 100 00:07:36,000 --> 00:07:38,940 jeśli polecenie to się powiedzie. 101 00:07:38,940 --> 00:07:43,140 Drugi argument to funkcja błędu, która jest wykonywana, jeśli to się nie powiedzie. 102 00:07:43,200 --> 00:07:48,930 Teraz pierwszy argument do każdej funkcji tutaj i te funkcje są oczywiście wykonywane w twoim 103 00:07:48,930 --> 00:07:50,510 imieniu przez pakiet 104 00:07:50,520 --> 00:07:54,990 SQL, więc te funkcje zawsze jako pierwszy argument uzyskują w zasadzie wykonane 105 00:07:55,140 --> 00:07:59,490 zapytanie i dodając tutaj podkreślenie jako nazwę, sygnalizuję, że Nie dbam 106 00:07:59,490 --> 00:08:01,740 o to, ale interesuje mnie drugi 107 00:08:01,740 --> 00:08:10,130 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ą. 108 00:08:10,170 --> 00:08:17,100 Więc tutaj utworzę obietnicę, używając nowej obietnicy, obietnic wbudowanych w JavaScript i obsługiwanych przez wersję JavaScript React 109 00:08:17,100 --> 00:08:23,820 Native używa i obietnica przyjmuje funkcję, która przyjmuje argument i funkcję odrzucenia jako argument, a teraz możemy 110 00:08:23,910 --> 00:08:25,290 przenieść tę bazę 111 00:08:25,800 --> 00:08:32,190 danych kod transakcji tam, a w przypadku powodzenia, nazywam rozwiązać, co oznacza, że zewnętrzna obietnica zostanie 112 00:08:32,220 --> 00:08:37,200 rozwiązana, w przypadku błędu, nazywam odrzucenie i przekazuję mój błąd tutaj, a 113 00:08:37,200 --> 00:08:41,220 następnie mogę zwrócić obietnicę tutaj ogólnie w mojej metodzie 114 00:08:41,220 --> 00:08:47,400 init i teraz mogę wywołać metodę init z innych miejsc w aplikacji i otrzymuję obietnicę, 115 00:08:47,400 --> 00:08:52,220 która zostanie rozwiązana, jeśli uda nam się zainicjować bazę danych, czyli 116 00:08:52,230 --> 00:08:58,440 przy tworzeniu tabeli lub jeśli napotkamy błąd. Nawiasem mówiąc, jeśli żadna tabela nie zostanie utworzona, 117 00:08:58,440 --> 00:09:06,680 ponieważ już istnieje, nie otrzymamy błędu, ale nadal będziemy w stanie powodzenia. Dzięki temu nadal nie przechowujemy niczego w bazie 118 00:09:06,680 --> 00:09:10,100 danych, ale konfigurujemy bazę danych. 119 00:09:10,100 --> 00:09:15,260 Upewnijmy się teraz, że nazywamy się init, i oczywiście miejscem, w którym można to nazwać, jest aplikacja. plik js, ponieważ chcemy 120 00:09:15,260 --> 00:09:18,060 zainicjować bazę danych tak szybko, 121 00:09:18,140 --> 00:09:25,700 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ś, 122 00:09:25,700 --> 00:09:30,620 co nie dziwi, a więc tutaj, kiedy ta aplikacja. Plik js jest wykonywany, gdy 123 00:09:30,750 --> 00:09:37,550 inicjalizujemy również magazyn Redux i tak dalej, chcę wywołać init tutaj, a teraz init jest 124 00:09:37,550 --> 00:09:45,380 albo udany, albo nie, więc na razie dodam blok wtedy, w którym mówię, że baza danych zainicjowała dziennik 125 00:09:45,770 --> 00:09:46,520 konsoli, 126 00:09:46,550 --> 00:09:54,200 więc to jest przypadek sukcesu lub blok przechwytywania, w którym pojawia się potencjalny błąd, w którym konsola logowania 127 00:09:54,230 --> 00:10:03,610 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 128 00:10:04,000 --> 00:10:09,880 dziennika, która jest wyjściem z iPhone'a, a teraz, gdy uruchomiła się na Androidzie, zobaczysz 129 00:10:09,880 --> 00:10:11,920 ją również dla Androida. 130 00:10:12,070 --> 00:10:18,610 Więc to działa, a teraz mamy bazę danych zainicjowaną, czas dodać teraz więcej metod, aby upewnić się, że możemy 131 00:10:18,610 --> 00:10:21,820 również wstawiać dane, a później oczywiście również pobierać dane.