sqlite

5
Copyright © Link group SQLite SQLite je mala, portabilna, efikasna i brza baza podataka. Koristimo je kada želimo da rukujemo umerenom količinom podataka i kada ne zahtevamo preterano velike performanse. Ova baza ne zahteva sistem za skladištenje, već se smešta u običan fajl. Za rukovanje SQLite-om potrebna nam je SQLite biblioteka. PHP sadrži ovu biblioteku, ali je za potrebe van PHP-a (WAMP-a) možemo skinuti sa SQLite sajta: http://www.sqlite.org/download.html Uz WAMP paket dolazi i veb alat za rukovanje SQLlite-om - SQLite manager. Ovaj alat možemo startovati iz WAMP Manager-a:

Upload: smilicevicue

Post on 25-Dec-2015

11 views

Category:

Documents


2 download

DESCRIPTION

SQLite

TRANSCRIPT

Page 1: SQLite

Copyright © Link group

SQLite

SQLite je mala, portabilna, efikasna i brza baza podataka. Koristimo je kada želimo da rukujemo umerenom količinom podataka i kada ne zahtevamo preterano velike performanse. Ova baza ne zahteva sistem za skladištenje, već se smešta u običan fajl. Za rukovanje SQLite-om potrebna nam je SQLite biblioteka. PHP sadrži ovu biblioteku, ali je za potrebe van PHP-a (WAMP-a) možemo skinuti sa SQLite sajta: http://www.sqlite.org/download.html Uz WAMP paket dolazi i veb alat za rukovanje SQLlite-om - SQLite manager. Ovaj alat možemo startovati iz WAMP Manager-a:

Page 2: SQLite

Copyright © Link group

Pored grafičkog okruženja, SQLite bazom je moguće rukovati putem konzolne aplikacije (sqlite.exe). U PHP-u, SQLite-om se rukuje putem PHP biblioteka:

extension=php_sqlite.dll ili

extension=php_pdo_sqlite.dll

Uspostavljanje konekcije u SQLite bazi zapravo je ništa drugo do kreiranje, odnosno, obraćanje jednom fajlu. Kreiranje ovog fajla, dogaña se u trenutku kreiranja SQLite objekta, u njegovom konstruktoru:

$baza = new SQLiteDatabase("mojabaza.sqlite"); Nakon ovako izvršene naredbe, u folderu u kome se nalazi skripta, pojaviće se i fajl koji predstavlja bazu (mojabaza.sqlite). Alternativno, možemo dodati još parametara konstruktoru. Mod fajla (s obzirom na to da ne postoji sistem koji za nas rukuje fajlovima, moramo imati kontrolu nad fajlom koji kreiramo) i procedura za obradu dogañaja (Handler) greške. Na osnovu procedure greške, možemo kontrolisati dalji tok aplikacije:

$baza = new SQLiteDatabase("mojabaza.sqlite",0666, $greska); if($greska) ........

Na ovaj način otvaramo fajl prilikom svakog korišćenja SQLite baze, ali će samo prvi put fajl biti kreiran (neće dolaziti do prepisivanja fajla ukoliko baza već postoji). Kada je baza kreirana, njome rukujemo kroz metode SQLiteDatabase klase. Dve osnovne metode su query i queryexec. Query koristimo kada nam je potreban upit koji vraća rezultat, dok queryexec koristimo za upite koji ništa ne vraćaju. Na primer, kreirajmo tabelu korisnici:

$baza->queryExec("create table korisnici(id integer primary key, ime varchar(255))");

(U primeru se pretpostavlja da objekat $baza već postoji, odnosno, da je baza otvorena.) Takoñe, možemo uneti i nekoliko korisnika:

$baza->queryExec("insert into korisnici values (nul l,'petar')"); $baza->queryExec("insert into korisnici values (nul l,'jovan')"); $baza->queryExec("insert into korisnici values (nul l,'zoran')");

Sintaksa (u koju nećemo detaljno ulaziti tokom ovog kursa) je očigledno vrlo slična svim ostalim SQL dijalektima.

Page 3: SQLite

Copyright © Link group

Kada smo uneli podatke, generisani ID možemo dobiti metodom lastInsertRowid:

echo $baza->lastInsertRowid() Za čitanje rezultata koristimo metod query. Kada metodom query preuzmemo Resultset, prolazimo sekvencijalno kroz njega metodom fetch. Ova metoda vraća aktuelni red i pozicionira marker na sledeći red:

$r = $baza->query("select * from korisnici"); while($red = $r->fetch())

echo "Id: " . $red[0] . " Ime: " . $red[1] . "<br>"; Podrazumevano, metod query vraća dva niza, asocijativni i numerički, ali možemo i ručno, eksplicitno formatirati rezultat: Samo asocijativni niz:

$r = $baza->query("select * from korisnici", SQLITE_ASSOC); while($red = $r->fetch()) echo "Id: " . $red["id"] . " Ime: " . $red["ime "] . "<br>";

Samo numerički (indeksirani) niz:

$r = $baza->query("select * from korisnici", SQLITE_NUM); while($red = $r->fetch()) echo "Id: " . $red[0] . " Ime: " . $red[1] . "< br>";

Rezultat možemo preuzeti i direktno u niz metodom arrayQuery:

$r = $baza->arrayQuery("select * from korisnici"); for($i=0;$i<sizeof($r);$i++) echo "Id: " . $r[$i]["id"] . " Ime: " . $r[$i][ "ime"] . "<br>";

Upiti koje smo do sada pominjali, izvršavaju se „baferovano″. To znači da se kompletan rezultat učitava u memoriju pre nego što mi pristupimo podacima. Ovaj pristup je za nijansu sporiji nego kada bismo podatke čitali direktno iz fajla (reprodukovano). Za uzvrat dobijamo mogućnosti koje inače ne bismo imali. Na primer, proveru broja redova. Ukoliko želimo da ne koristimo baferovano čitanje, koristimo metod unbufferedquery:

$r = $baza-> unbufferedQuery("select * from korisnici"); foreach($r as $red) //nije mogu će dobiti ta čan broj redova echo $red["ime"];

Umesto objektnog, možemo upotrebiti i proceduralni pristup SQLite bazi. U tom slučaju, rukovanje je slično MySQL PHP setu. Prvo se kreira resurs, funkcijom sqlite_open (prosleñuje se lokacija baze), zatim se kreira promenljiva sa Resultset-om (Resultset Resurs) da bi se konačno prošlo kroz svaki red ponaosob, putem petlje:

Page 4: SQLite

Copyright © Link group

$baza = sqlite_open("mojabaza.sqlite"); // kreiranj e db resursa $r = sqlite_query("select * from korisnici",$baza); // kreiranje resultset resursa while ($red = sqlite_fetch_array($r)) // prolazak k roz resultset resurs echo "Id: " . $red["id"] . " Ime: " . $red["ime "] . "<br>";

Kada preuzmemo rezultat putem SQLite upita, pozicija aktuelnog reda se nalazi na prvom redu rezultata. To znači da je za upit select * from korisnici aktuelni red ID:1 ime: petar. Ovaj red možemo preuzeti i ručno, metodom current.

$r = $baza->query("select * from korisnici"); $c = $r->current();

Da bismo marker pomerili za jedno polje unapred, koristimo metod next:

$r->next();

Za proveru postojanja aktuelnog reda, koristimo metod valid:

$r->valid() Tako rezultate možemo dobiti i na sledeći način:

$r = $baza->query("select * from korisnici"); while ($r->valid()) { $red = $r->current(); echo "Id: " . $red["id"] . " Ime: " . $red["ime "] . "<br>"; $r->next(); }

Možemo se takoñe vratiti i korak u nazad, metodom prev:

$r->prev(); Često se u SQL-u koriste funkcije kojima se pristupa podacima tokom samog kreiranja rezultata. Nešto slično može se postići i u SQLite-u. Potrebno je prvo definisati funkciju:

function saberi($a,$b) { return $a+$b; }

Zatim se ta funkcija dodeljuje SQLite objektu:

$baza->createFunction("fnSaberi","saberi",2);

Page 5: SQLite

Copyright © Link group

Konačno, možemo izvršiti upit sa pridruženom funkcijom:

$r = $baza->arrayQuery("select fnSaberi(id,id) as s ab from korisnici"); Ceo kod izgleda ovako:

$baza = new SQLiteDatabase("mojabaza.sqlite"); function saberi($a,$b) { return $a+$b; } $baza->createFunction("fnSaberi","saberi",2); $r = $baza->arrayQuery("select fnSaberi(id,id) as s ab from korisnici"); foreach($r as $red) echo $red["sab"];

SQLiteDatabase nije neophodno uništavati nakon upotrebe, jer nam je poznato da PHP nakon izvršenja skripte (dokumenta), zatvara sve fajl procedure, a sobzirom na to da SQLite objekat takoñe rukuje sa fajlovima, to pravilo se odnosi i na njega. Ako hoćemo da budemo sigurni, možemo uništiti objekat funkcijom unset:

unset($baza);

SQLiteom možemo rukovati i putem PDO objekta:

$pdo = new PDO("sqlite:mojabaza.sqlite"); $r = $pdo->query("select * from korisnici"); foreach($r->fetch() as $red) echo "Id: " . $red["id"] . " Ime: " . $red["ime "] . "<br>";

Na kraju, ponovimo da SQLite nije baza koju možete koristiti za frekventne aplikacije koje opslužuju mnogo korisnika i koje rukuju sa velikim brojem konkurentnih upita. SQLite je pogodan za manje aplikacije, pre svega zbog svoje portabilnosti i jednostavnosti. Najvažnije iz lekcije

1. SQLite je mala baza podataka koja se smešta u fajl. 2. Da bi se rukovalo SQLite bazom, potrebno je da bude učitana ekstenzija

php_sqlite.dll. 3. SQLite objekat se kreira putem konstruktora SQLiteDatabase. 4. Upiti nad SQLite bazom se mogu izvršiti metodom query. 5. Podaci o aktuelnom redu dobijaju se metodom fetch. 6. Poslednji uneti ID dobija se metodom lastInsertRowid. 7. Podatke iz SQLite baze je moguće čitati baferovano i nebaferovano.