Uporaba internetne podatkovne baze TinyWebDB

Uporaba internetne podatkovne baze TinyWebDB

Avtor: Ernest Gungl (prevedeno in prirejeno po knjigi App Inventor 2, Wolber in drugi)

Učni cilji: Poznam programske konstrukte za delo z internetno podatkovno bazo (TinyWebDB) in jih smiselno uporabljam: shranjevanje podatkov v bazo, proženje poizvedb po podatkih v bazi, pridobivanje podatkov iz nje

Uvod

Za vsakega člana hrani Facebook podatkovno bazo, ki vključuje ime računa, prijateljev in elektronskih naslovov. Amazon ima podatkovno bazo o vsem kar prodaja – kar lahko mi kupimo. Google ima podatkovno bazo o vseh spletnih straneh svetovnega spleta (WWW). Veliko naprednih aplikacija, ki jih lahko tudi sami napišemo lahko komunicirajo s podatkovno bazo.

V večini programskih okolij velja, da pisanje aplikacij, ki komunicirajo z bazo, sodi med naprednejše tehnike programiranja: najprej je potrebno konfigurirati bazni strežnik (npr. MySQL ali Oracle), nato pa napisati programsko kodo, ki zna komunicirati s strežnikom. Na mnogih univerzah se študentje učijo programirati podatkovne baze šele, ko imajo dovolj izkušenj z osnovnim programiranjem.

Pri uporabi App Invetorja je delo z bazo enostavno, saj samo programsko okolje za nas opravi najtežje stvari in mnogo drugih koristnih stvari). Jezik pripravi komponente, ki omejijo komunikacijo z bazo na zgolj dve vrsti operacij: Shrani, Pridobi! Pišemo lahko dve vrsti aplikacij. Prva vrsta shrani podatke neposredno na napravo (baza se torej nahaja lokalno na napravi), druga vrsta pa shranjuje podatke na centralizirano bazo, ki se nahaja na spletnem strežniku. Ta zadnja omogoča enostavno deljenje podatkov z drugimi uporabniki.

Podatki shranjeni v spremenljivkah ali nastavitvah komponent aplikacije so kratkotrajnega značaja. Če uporabnik zapiše neke podatke v obrazec in ga zapre, ne da bi le-te ped tem shranil v bazo, se podatki izgubijo. Da bi podatke trajno shranili, jih moramo shraniti v podatkovno bazo. Shranjevanje podatkov v bazo je t.i. trajno shranjevanje, saj ko aplikacijo ponovno odpremo, bomo podatke spet imeli na razpolago.

APP Inventor ponuja dve komponenti za delo z bazo: TinyDB in TinyWebDB. Za shranjevanje podatkov lokalno bazo, ki se nahaja na naši Android napravi moramo uporabiti TinyDB. Ta je primerna za shranjevanje podatkov, za katere nimamo potrebe po delitvi z drugimi napravami ali osebami v spletu. Za deljenje podatkov z drugimi napravami in osebami v spletu, uporabimo TinyWebDB, ki shrani podatke v internetni podatkovni bazi.

Podatkovna baza, ki omogoča internetni dostop je zelo pomembna npr. za igranje večuporabniških spletni iger in drugih aplikacij, kjer je izmenjava podatkov med uporabniki oz. aplikacijami bistvena. V tem gradivu bomo opisali prav to vrsto podatkovne baze.

(slika3_0.jpg)

Skupna raba podatkov in internetna podatkovna baza (TinyWebDB)

TinyDB shranjuje podatke v lokalno bazo. Torej podatki so razpoložljivi samo uporabniku, ki to napravo uporablja. Včasih pa je želeno, da si uporabniki izmenjujejo informacije preko interneta (Facebook, Twiter, večuporabniške igre). TinyWebDB je internetni ekvivalent TinyDB, ki omogoča shranjevanje podatkov na internetno dosegljiv strežnik s pomočjo StoreValue/GetValue, podobno, kot to počne TinyDB. TinyWebDB (privzeto) shranjuje podatke na spletni podatkovni strežnik, ki ga je postavil APP Inventor tim. Dosegljiv je na naslovu: http://appinvtinywebdb.appspot.com. Ta spletna stran priskrbi podatkovno bazo in streže (responds to ) spletnim zahtevam po shranjevanju in pridobitvi podatkov iz baze. Spletna stran vsebuje tudi uporabniški spletni vmesnik, ki ga lahko uporablja administrator podatkovne baze (to boste verjetno vi) za preučevanje podatkov shranjenih tam. Ta privzeta podatkovna baza je namenjena samo testnemu razvoju aplikacij, saj je dosegljiva vsem razvijalcem aplikacij z App Inventorjem. Ker lahko vsak razvijalec shrani podatke tukaj, ni zagotovila, da vam nihče drug ne bo pobrisal podatkov v bazi. Ta podatkovna baza je povsem v redu, če se želite le naučiti dela z bazo ali če želite le nekaj na hitro preskusiti. Vendar, če želite izdelati resno aplikacijo v App Inventorju, ki se povezuje s podatkovno bazo, je nujno, da sami kreirate novo podatkovno bazo, ki bo dosegljiva samo vam. Ker trenutno raziskujemo delo z bazo na splošno, bomo v ta namen uporabili kar privzeto skupno (vsem dosegljivo) podatkovno bazo. V kasnejših poglavjih bomo pokazali, kako kreiramo svojo lastno podatkovno bazo ter kako konfiguriramo TinyWebDB za uporabo.

Osnovni gradniki za delo z internetno podatkovno bazo

TinyWebDB.StoreValue deluje na povsem enak način kot TinyDB.StoreValue, s to razliko, da TinyWebDB shranjuje podatke na internetni strežnik. Delovanje TinyWebDB bomo razložili na primeru aplikacije za glasovanje. Predpostavimo, da uporabnik aplikacije lahko vnese svoj glas (npr. »Sem za gasilce«) v tekstovno polje (v našem primeru glasTextBox) in pritisne gumb glasujButton, da odda svoj glas. Da bi shranili podatke (njegov glas) na internetni podatkovni strežnik, tako da bi jih lahko videli tudi drugi uporabniki aplikacije, moramo napisati kodo upravitelja dogodka glasujButton.Click, podobno tej na sliki 3.

(slika3.PNG)
Slika 3: Shranjevanje podatkov v internetno podatkovno bazo ob pritisku na gumb glasujButtom

Vloga nalepke (tag) je ista, kot smo jo spoznali pri uporabi lokalne podatkovne baze TinyDB. Uporabljena je za identifikacijo podatka v podatkovni bazi (v našem primeru uporabniškega elektronskega naslova, kot bomo videli kasneje). Vrednost je kakršenkoli podatek, ki ga priredimo parametru valueToStore (v nsšrm primeru uporabnik vnese ta podatek v te tekstovno okno glasTextBox). Če je torej uporabnik vnesel v tekstovno okno elektronski naslov miha@fmf.si in je glasoval za gasilce (»Sem za gasilce!«), izgleda njegov vnos podatkovni bazi po sliki 4.

(slika4.PNG)
Slika 4: Nalepka in vrednost za glas sta zabeležena bazi

TinyWebDB.StoreValue blok pošlje par nalepka-vrednost (tag-value) na internetni podatkovni strežnik, ki se nahaja na naslovu http://appinvtinywebdb.appspot.com.

Testiranje vnosov v podatkovno bazo

Vse vnose podatkov v internetno podatkovno bazo lahko preverimo kar neposredno preko spletnega vmesnika na naslovu http://appinvtinywebdb.appspot.com (slika 5).

(slika5.PNG)
Slika 5: Opazovanje in nastavljanje vsebine internetne baze je mogoča kar preko spleta

Povezava z imenom /getvalue priskrbi vmesnik za vnos iskane nalepke in nas oskrbi z ustreznim podatkov, ki pripada tej nalepki (če sploh).

(slika6.PNG)
Slika 6: Iskanje in vnašanje podatkov v bazo po nalepki (tag)

Mogoče je tudi shranjevati podatke v bazo kar preko spleta (/storevalue). Ta možnost je zelo dobrodošla pri pisanju aplikacij, ki za svoje delo uporabljajo internetno podatkovno bazo. Spletna stran prikazuje trenutno vrednost za želeno nalepko.

Zahtevanje in procesiranje podatkov iz baze

Pridobivanje podatkov iz internetne podatkovne baze je nekoliko zahtevnejše kot iz lokalne podatkovne baze (TinyDB). V primeru lokalne podatkovne baze, vrne metoda GetValue podatek takoj, saj aplikacija komunicira s podatkovno bazo, ki se nahaja kar na sami napravi Android. Aplikacije, ki za svoje delovanje uporabljajo TinyWebDB za dostop do internetne podatkovne baze potrebujejo več časa za prejem podatka. Iz tega razloga pridobitev podatka iz internetne baze zahteva dva koraka. Klic metode GetValue ne vrne podatkov iz baze ampak le samo zahteva le-te iz baze; dejansko bi se metoda morala imenovati »RequestValue« (zahtevaj vrednost), saj le-ta samo poda zahtevo baznemu strežniku, ne priskrbi pa podatkov neposredno. Da bi to bolje spoznali, poglejmo razliko med TinyDB.GetValue (slika 7 zgoraj) in TinyWebDBGetValue (slika 7 spodaj).

(slika7.PNG)
Slika 7: TinyDB.GetValue in TinyWebDBGetValue bloka

Ker blok TinyDB.GetValue vrne vrednost kar neposredno ob klicu, ima na levi strani vtikač, ki omogoča prireditev vrnjene vrednosti spremenljivki ali lastnosti. Ker TinyWebDB blok ne vrne vrednosti neposredno, zato na levi strani nima vtikača za prireditev vrnjene vrednosti. Namesto tega, ko strežniška podatkovna baza izpolni zahtevo in podatki prispejo do naše naprave, to proži dogodek TinyWebDB.GotValue. Torej, če povzememo: Mi kličemo TinyWebDB.GetValue na enem mestu naše aplikacije, nato pa sprogramiramo upravitelj dogodkov TinyWebDB.GotValue v smislu, kaj naj naredi s podatki, ko končno prispejo. Upravitelj dogodkov TinyWebDB.GotValue včasih tudi imenujemo »callback procedure«, ker zunanja naprava (internetni podatkovni strežnik) pokliče našo aplikacijo, po procesiranju naše zahteve s strani bloka TinyDB. GetValue. Ta način je podoben naročanju stvari v kavarni, kjer imajo veliko gnečo: najprej naročimo želeno kavo, nato pa čakamo, da nas pokličejo, da prevzamemo naročeno. V vmesnem času prevzemajo še naročila od vseh drugih strank, ki v vrsti čakajo na naročilo (tudi vsi ti nato čakajo, da jih pokličejo za prevzem naročenega).

GotValue, GetValue v akciji

Za našo aplikacijo »Volilna naprava«, želimo shraniti in pridobiti seznam volivcev, ki uporabljajo aplikacijo, saj mora aplikacija prikazati glasove vseh volivcev. Najpreprostejši način za pridobitev seznama podatkov je ob zagonu aplikacije preko dogodka Screen.Initialize, kot prikazuje slika 8. V tem primeru bomo poklicali internetno strežniško podatkovno bazo preko nalepke (tag) »seznamVolilcev«.

(slika8.PNG)
Slika 8: Zahtevanje podatkov v bloku Screen2.Initialize

Ko seznam volivcev končno prispe iz podatkovnega strežnika, to proži upravitelj dogodkov TinyWebDB1.GotValue. Slika 9 prikazuje nekaj blokov za procesiranje vrnjenega seznama.

(slika9.PNG)
Slika 9: Za procesiranje vrnjenega seznama je uporabljen upravitelj dogodkov GotValue

VaueFromWebDB, ki je argument upravitelja dogodkov GotValue vsebuje podatek, ki ga je poslala strežniška podatkovna baza. Omenjen argument ima pomen (je viden) samo znotraj omenjenega bloka. Ker gre za lokalno spremenljivko, do nje ne moremo dostopati iz drugih blokov. Ker argumenti, kot je valueFromWebDB, niso globalno dosegljivi, priredimo njihove vrednosti globalnim spremenljivkam, če želimo njihove vrednosti uporabiti tudi v drugih blokih. Edini namen bloka GotValue je, da priredi vrednost paramtra valurFromDB globalni spremenljivki seznamVolilcev, ki jo lahko uporabimo v drugih blokih (upraviteljih dogodkov). Blok if v upraviteljih dogodkov se pogosto uporablja v navezi z GotValue. Razlog za to je, da lahko podatkovni bazni strežnik vrne prazen tekst (»«) v parametru valueFromWebDB, če v podatkovni bazi ni podatka za zahtevano oznako (tag). Bazni strežnik vrne prazno vrednost po navadi, ko aplikacijo prvič uporabimo in v bazi še ni podatka. Če vrnjen podatek valueFromWebDB je prazen tekst (stavek if vrne false), ga ne shranimo v globalno spremenljivko seznamVolilcev.

0%
0%