baze podataka i razvoj aplikacija
DESCRIPTION
Baze podataka i razvoj aplikacija. Prof. dr MILORAD K. BANJANIN Univerzitet u Istočnom Sarajevu Tehnološki fakultet Zvornik. Na srednjem sloju se nalaze i softverske komponente izgrađene korišćenjem EJB (J2EE), BC4J (Oracle), COM (DNA Microsoft) ili .NET (Microsoft). - PowerPoint PPT PresentationTRANSCRIPT
Baze podataka i razvoj aplikacija
Prof. dr MILORAD K. BANJANIN
Univerzitet u Istočnom SarajevuUniverzitet u Istočnom Sarajevu
Tehnološki fakultet ZvornikTehnološki fakultet Zvornik
relacioni sistem za upravljanje bazom podataka interpretira SQL upit i daje
odgovarajući tabelarni rezultat
Neophodno je omogućiti razvoj složenih programskih sistema koji koriste bazu
podataka
Arhitektura softverskog sistema koji koristi bazu podataka
Desktop aplikacija
HTML klijent
ASP JSP Servlet
Web servis HTML/DHTML/XML
EJB .NET
BC4J COM
Procedure baze
podataka
Baza podataka
Aplikacioni server
Web server
RMI-IIOP DCOM
HTTP1 varijanta
Dvoslojna arhitektura – prezentacioni i sloj
poslovne logike objedinjeni u desktop aplikaciji – “debeli”
klijent
2 varijanta
Troslojna arhitektura - korišćenje Web tehnologija – Web brauzer (“tanki” klijent) i Web server komuniciraju putem
HTTP-a
Instalirane su specijalne komponente (moduli) koji omogućavaju izvršavanje programskog koda
pisanog u nekom script jeziku ili čak izvršnih programa
3 varijanta
Na srednjem sloju se nalaze i softverske komponente izgrađene
korišćenjem EJB (J2EE), BC4J (Oracle), COM (DNA Microsoft)
ili .NET (Microsoft)
Potpuno se odvaja poslovna od
prezentacione logike
4 varijanta
Klijentska aplikacija korišćenjem SOAP protokola poziva vidljive operacije Web
servisa i predaje parametre u XML formatu – pozvana metoda Web servisa poziva fnkcije za
pristup bazi podataka i inicira izvršenje zahtevane SQL naredbe
Omogućavaju da deo poslovne logike bude smešten u bazi
podataka
Aplikacija
Baza podataka SUBP
Procesor baze podataka
SQL-server
SUBP interfejsi
SQL-klijent servisi
Lokalni pristup
Udaljeni pristup
SQL-klijent
SQL ili poziv procedure
Call Level Interface
Embedded SQL
SUBP interfejsi
SQL ili poziv
procedure
Opšti način komunikacije programskih sistema sa bazom podataka
Prihvata i obrađuje SQL naredbe i
izvršava (fizički) operacije nad perzistentnim
podacima
Služu za komunikaciju sa
aplikacijom korišćenjem
interfejsa koji prihvata SQL
Prihvata SQL naredbe i određuje gde će te
naredbe biti obrađene, izprocesirane Dva osnovna načina preko
kojih se korišćenjem SQL upita ili pozivom
procedure baze podataka može pristupiti bazi
podataka
U njoj su implementirane
određene poslovne funkcije, a svaka
aplikacija koja koristi bazu
podataka sadrži specificirane
sekvence operacija nad bazom podataka
korišćenjem SQL-a
SQL unutar klasičnih i objektnih programskih jezika (Embedded SQL)
SQL je homogeno relacioni jezik, jezik koji se može koristiti i za interaktivnu komunikaciju korisnika sa BP i
unutar klasičnih i objektnih programskih jezika (C, Fortran, Pascal, Java, ...), za razvoj aplikativnih programa
naredbe programskog jezika koje se koriste, “jezika domaćina”, i SQL naredbe su
“pomešane”
Osnovni koncepti će biti objašnjeni na programskom jeziku C, ali se u potpunosti sve odnosi i na ostale konvencionalne i
objektne jezike
Primeri će biti ilustrovani na relacionom modelu:
Racun (BrojRacuna, Datum, NazivKupca, Napomena, Ukupan iznos)StavkaRacuna (BrojRacuna, RbStavke, SifraProizvoda, Kolicina,
JedinicnaCena, ProcenatPoreza, IznosPoreza)Proizvod (SifraProizvoda, NazivProizvoda, JedinicaMere,
ProdajnaCena)
Kombinovanjem naredbi jezika treće generacije i SQL-a omogućava, sa jedne strane korišćenje
proceduralnih karakteristika jezika treće generacije (sekvenca, selekcija, iteracija,
procedura, podprograma), a sa druge strane pristup podacima u bazi podataka pomoću SQL-a
Programi pisani pomoću ugrađenog SQL-a omogućavaju:
Istovremenu obradu podataka u bazi podataka i podataka u datotekama operativnog sistema
xx
Korišćenje rekurzivnih podprograma, najčešće za obradu hijerarhijskih ili mrežnih struktura podataka
xx
Korišćenje dinamičkog SQL-a – SQL naredbe se definišu u vreme izvršavanja programa, a ne u vreme prevođenja
xx
Korišćenje DDL naredbi za kreiranje i izmenu objekata baze podataka
xx
Procesiranje aplikacionog programa sa SQL-om unutar programskih jezika
Jezik domaćin +
SQL naredbePretprocesor
Jezik domaćin +
Poziv funkcija
Prevodilac jezika
domaćina
Izvršni program
(aplikacija)
SQL biblioteka funkcija
Baza podataka
Sintaksna i semantička provera
Iz aplikacionog programa
“izvlači” SQL naredbe i
prevodi u pozive funkcija
Kao rezultat se dobija kod u izvornom programskom jeziku koji se kompajlira i linkuje sa
SQL bibliotekom
sadrži implementaciju pozvanih funkcija
Vrši i proveru sintakse za SQL naredbe, proveru tipova u odnosu
na bazu da bi se osigurala kompatibilnost podataka koji se
razmenjuju između jezika domaćina i SQL-a
hIndikator = -1;EXEC SQL UPDATE Racun
SET ukupanIznos = :hIzn:hIndikatorWHERE sifraProizvoda = :hSifra;
EXEC SQL BEGIN DECLARE SECTION;int hBroj, hRb, hSifra, hIndikator;VARCHAR hNaziv[50];float hKol, hStopa;float hIznPor, hIzn, hCena;
EXEC SQL END DECLARE SECTION;
U slučajevima kada je rezultat upita SELECT ... FROM ... WHERE ... samo jedna n-torka, naredba SELECT se proširuje sa klauzulom INTO koja
omogućava smeštanje rezultata upita u HOST promenljive
EXEC SQL SELECT ProdajnaCena INTO :hCenaFROM ProizvodWHERE sifraProizvoda = :hSifra;
Deklaracija HOST promenljivih vrši se u sekciji deklaracije:
Deklarativnom delu
programa
SQL naredbe se koriste u
Proceduralnom delu
programa
Definišu se sve HOST promenljive koje se koriste u programu preko naredbi jezika domaćina, čime se
obezbeđuje komunikacija aplikacionog programa sa bazom podataka
Sadrži deklaraciju specijalonih sistemskih promenljivih (SQL
Communicaton Area) preko kojih se u program prenose statusi
izvršenja pojedinih SQL naredbi nad BP
U okviru jezika domaćina ove promenljive se koriste na standardan način, dok se u SQL naredbama koriste sa prefiksom :
(dvotačka).
Ukoliko program treba da radi sa nula vrednostima mora se koristiti “indikator” promenljive
Svaka HOST promenljiva koja može da dobije nula vrednost mora imati
svoju indikator promenljivu
U SQL naredbama indikator promenljiva se koristi tako što se
odmah iza naziva HOST promenljive navodi : i naziv indikator promenljive
PRIMER
EXEC SQL DECLARE cSt CURSOR FORSELECT RbStavke, Kolicina, ProcenatPoreza, IznosPorezaFROM StavkaRacunWHERE brojRacuna = :hBroj;
EXEC SQL DECLARE <ime-kursora> CURSOR FOR <selectNaredba>
Deklarativnom delu
programa
SQL naredbe se koriste u
Proceduralnom delu
programa
Osnovni problem u usaglašavanju jezika domaćina sa SQL-om je u tome što SQL operiše nad tabelama, a jezik domaćin
nad rekordima (vrstama tabela)
Neophodno je definisati jedan specijalni “bafer” koji se naziva kursor, u koga se smeštaju rezultati takvog upita i iz koga je moguće preuzimati n-torku po n-torku,
kako to jezik domaćin zahteva
Deklaracija kursora nije izvršna naredba, mada se pojavljuje u proceduralnom delu programa.
Izvršne operacije nad kursorom su:
EXEC SQL OPEN <ime-kursora>
“aktivira” kursor – izvršava upit preko koga je kursor definisan i smešta rezultat u odgovarajući
“bafer”
kursor ima i ulogu pokazivača i posle OPEN naredbe pokazuje na
položaj ispred prve n-torke u “baferu”
EXEC SQL FETCH <ime-kursora> INTO <ime-programske-prom>
pomera kursor koji je “otvoren” za jedno mesto unapred i pridružuje vrednost atributa promenljivim
programa
EXEC SQL CLOSE <ime-kursora>
zatvara kursor koji se kasnije može opet otvoriti, radi
izvršavanja istog upita sa novim tekućim vrednostima programskih
promenljivih
PRIMER
EXEC SQL OPEN cSt;while (1) (
EXEC SQL FETCH c INTO :hRb, : hKol, : hStopa, :hIznPor;
if (SQLCODE == 100) { // nema više vrednosti u kursoru
break;}
)EXEC SQL CLOSE cst;
U različitim implementacijama SQL-a kursori se razlikuju po sledećim osobinama
da li se podacima može pristupati samo od prvog ka poslednjem ili i na drugi način (scrollable cursor)
xx
da li se isti kursor mora zatvoriti pre nego što se ponovo otvori (reopenable cursor)
xx
Ukoliko se kursor definiše sa opcijom SCROLL pre ključne reči CURSOR onda se omogućava i nekoliko opcija za pristup željenon
n-torki: NEXT ili PRIOR, FIRST ili LAST, RELATIVE i ABSOLUTE
daje sledeću ili prethodnu n-torku u odnosu na tekuću poziciju kursorapozicioniranje na prvu odnosno
poslednju n-torku iz kursoraiza njega sledi ceo broj, pomera za
dati broj poziciju u kursoruiza njega sledi ceo broj koji definiše
redni broj n-torke u kursoru
INSERT
Ažuriranje baze podataka
UPDATE INSERT
Standardne SQL naredbe
Kursor
Mora biti definisan nad jednom baznom tabelom ili jednim
pogledom
U slučaju ažuriranja neophodno je da sve HOST promenljive koje
učestvuju u SQL naredbama imaju definisanu vrednost pre izvršenja
SQL naredbehBroj = 10;strcopy (hNaziv, “Milorad”);EXEC SQL INSERT INTO RACUN (BrojRacuna,
Datum, NazivKupca)VALUES (:hBroj,
CURRENT_DATE, :hNaziv);
U SUBP Oracle je neophodno proširiti definiciju kursora sa dodatnom
klauzulom [FOR UPDATE OF] koja omogućava ažuriranje redova tabele
koji odgovaraju tekućem redu kursora
Pojava greške pri izvršavanju SQL naredbi ne dovodi do prekida izvršavanja programa
Neophodno je u svakom programu na odgovarajući naćin obrađivati greške, a postoje dva načina za to
Korišćenje klauzule WHENEVER – deklarativna naredba koja je nedovoljno strukturirana zbog izbora akcija nakon ispunjenja nekog
uslova
11
Akcije su: CONTINUE, STOP ili GOTO
Ispitivanje vrednosti promenljive SQLCODE (u SQL:1999 = SQLSTATE) koje je neophodno posle svake SQL naredbe – omogućava korišćenje
standardnih modula za obradu greške koji obezbeđuju i prekid i nastavak rada
22
Dinamički SQL omogućava pisanje programa u kome SQL naredba nije poznata sve do vremena izvršavanja programa
Umesto da se SQL naredba napiše eksplicitno u programu, tekst SQL naredbe se pamti kao vrednost neke promenljive, a zatim se traži
izvršavanje naredbe koja je sadržana u promenljivojProces formiranja i izvršavanja dinamičkih SQL naredbi se sastoji od:
formiranja teksta SQL naredbe na osnovu ulaznih podatakapripremanja naredbe za izvršavanje, odnosno vrši se procesiranje
naredbepovezivanja HOST promenljive sa parametrima SQL naredbe
izvršavanja SQL naredbe
Postoje četiri različita načina za izvršavanje dinamičke SQL naredbe:
SQL naredba nije SELECT naredba i ne uključuje HOST promenljive11
Tekst SQL naredbe se smešta u promenljivu, a zatim se korišćenjem SQL naredbe EXECUTE IMMEDIATE (naredba se prvo parsira pa izvršava) traži izvršenje naredbe
SQL naredba nije SELECT naredba i uključuje fiksan broj i poznate tipove HOST promenljivih
22
Tekst SQL naredbe se smešta u promenljivu, a zatim se korišćenjem SQL naredbe PREPARE prvo parsira, pa EXECUTE traži izvršenje
SQL naredba je SELECT naredba i uključuje fiksan broj i poznate tipove HOST promenljivih
33
Koristi se za SELECT naredbe sa fiksnim brojem parametara. Tekst SQL naredbe se smešta u promenljivu, a zatim se korišćenjem SQL naredbe PREPARE parsira SQL
naredba, pa se koriste naredbe za deklarisanje i manipulaciju kursorom
Bilo koja SQL naredba koja omogućava korišćenje promenljivog i broja i tipova HOST promenljivih
44
Omogućava potpuno uopštavanje, odnosno razvoj programa kao što je modul za interaktivno korišćenje SQL naredbi – u praksi retko potrebno, a pisanje veoma
složeno
SQLJ predstavlja deo SQL:1999 standarda koji definiše način umetanja SQL naredbi u okviru objektnog programskog jezika
Java
I u ovom slučaju su SQL naredbe podeljene na deklarativne i izvršne, s tim što SQL naredbe počinju sa #sql
Ne postoji posebna deklaracija promenljivih koje će se koristiti u SQL naredbi što znači da se može koristiti bilo koja Java promenljiva
Promenljive se takođe koriste sa : (dvotačkom) ispred njihovog imena
PRIMER
#sql {SELECT prodajnaCena, nazivProizvoda INTO :hCena, :hNaziv
FROM Proizvod WHERE sifraProizvoda = :hSifra};
Prilikom rada sa HOST promenljivim treba uzeti u obzir da osnovni Java tipovi (int, double, float, ...) ne mogu imati nula vrednost – prilikom prihvatanja podataka iz baze SQL nula vrednosti bivaju konvertovane u Java
nula vrednosti
Objekat klase
ITERATORPrihvata rezultate upita i
omogućuje mehanizam navigacije kroz dobijene n-torke
Koristi se ukoliko SELECT naredba vraća veći broj n-
torki
Koncept sličan kursoru
Imenovani iterator – za njega se specificira ime i tip kolone11
// deklaracija imenovanog iteratora#sql iterator StavkaIter { int rb, float kolicina, int proizvod };
Pozicioni iterator – za njega se specificira samo tip kolone22
// deklaracija pozicionog iteratora#sql iterator StavkaIter { int, float, int };
Za navigaciju kroz iterator se koristi metoda next() koja vraća FALSE ako je kraj iteratora, a za zatvaranje iteratora se koristi metoda close(), dok imenovani iteratori imaju metode za pristup podacima koje se zovu kao i
kolone
Kod pozicionih iteratora podaci se moraju direktno smeštati u Java host promenljive pomoću FETCH...INTO naredbe, a host promenljive moraju biti u odgovarajućem broju i redosledu tipa deklarisanog u
pozicionom kursoru
Pristup bazama podataka preko poziva funkcija
Druga mogućnost je korišćenje funkcija preko kojih se SUBP-u prosleđuje tekst upita koji on izvršava i vraća programu odgovarajući
rezultat
Do sada su baze podataka bile korišćene iz programskih jezika “međanjem” naredbi programskog jezika i upitnog jezika
SQL/CLISQL Call-Level Interface je
aplikacioni programski interfejs (API) za SQL pristup
bazama podataka iz programskih jezika
Daje biblioteku funkcija preko kojih se klijent povezuje sa bazom podataka i pristupa podacima
sa SQL upitom ODBC, JDBC, ADO, ADO.NET
Standardi za komunikaciju programskih jezika i baze
podataka
ODBC - Open DataBase Connectivity
Biblioteka standardizovanih funkcija (imaju ime, ulazne i izlazne argumente) koje su na raspolaganju programeru da iz programskog
koda pristupa bazama podataka API za pristup različitim, heterogenim bazama podataka bez izmene izvornog programskog
koda
SQL Server
AplikacijaODBC interfejs
ODBC Driver Manager
SQL Server
ODBC Driver
ORACLE
ODBC Driver
...
ODBC Driver
ODBC arhitektura
ORACLE ...
Osnovne funkcije ODBC biblioteke biće objašnjene korišćenjem programskog
jezika C na sledećim relacionim modelom<
Racun (BrojRacuna, Datum, NazivKupca, Napomena, Ukupan iznos)StavkaRacuna (BrojRacuna, RbStavke, SifraProizvoda, Kolicina,
JedinicnaCena, ProcenatPoreza, IznosPoreza)Proizvod (SifraProizvoda, NazivProizvoda, JedinicaMere,
ProdajnaCena)
Da bi se funkcije ODBC biblioteke mogle koristiti u programu, na početku je potrebno priključiti neophodne header datoteke u
kojima se nalaze definicije funkcija, tipova podataka, struktura i konstanti
#include <sql.h>#include <sqlext.h>#include
<sqltypes.h>
#include <odbcss.h>
Priključivanje tih header datoteka obezbeđuje kreiranje i manipulaciju sa sledećim vrstama rekorda (struktura u C-u)
Environment (okruženje) – struktura koja čuva globalne informacije o ODBC okruženju, npr. lista otvorenih konekcija i trenutno aktivna
konekcija
11
Connection (konekcija) – struktura koja sadrži podatke o konekciji, npr. naziv baze podataka, korisničko ime, status transakcije, ...
22
Statement (naredba) – struktura koja sadrži jednu SQL naredbu33
N-torke i parametri – strukture čuvaju informacije bilo o parametrima upita bilo o n-torkama rezultata
44
U programu su te strukture reprezentovane preko pokazivača na njih, koji se zovu handleSQLHENV henv = SQL_NULL_HENV;
SQLHDBC CON = SQL_NULL_HDBP;SQLHSTMT stmt = SQL_NULL_HSTMT;
Inicijalizacija pokazivača na strukturu koja predstavlja ODBC okruženje je uvek prvi korak u aplikaciji
Bez tog alociranja memorijskog prostora nije moguće koristiti ni jednu funkciju ODBC biblioteke, međutim trebalo bi alocirati
jedan i samo jedan handle na ODBC okruženje
Alociranje memorijskog prostora vrši se pozivom funkcije SQLAllocHandle(), čiji je argument vrsta pokazivača – ona vraća vrednost
tipa SQLRETURN (integer)
Funkcija SQLSetEnvAttr() se koristi za postavljanje vrednosti nekih atributa u strukturi ODBC okruženja
Za konektovanje na bazu podataka se koristi funkcija SQLConnect()
Da bi se pozvala funkcija za izvršenje neke SQL naredbe neophodno je prvo inicijalizovati pokazivač na strukturu koja predstavlja SQL
naredbu i time rezervisati potreban memorijski prostor za podatke o naredbi// alociranje memorijskog prostora za naredbu
retcode = SQLAllocHandle (SQL_HANDLE_STMT, con, &stmt)
Načini specificiranja i izvršenja SQL naredbe
Pripremljeno izvršenje (prepared
execution)
Direktno izvršenje (direct execution)
Poziv funkcije SQLPrepare() gde se kao argument prosleđuje SQL
naredba – po pravilu SQL naredba sadrži markere za parametre
označene sa ?
11
Poziv funkcije SQLBindParameter() kojom se postavljaju vrednosti parametara ukoliko naredba sadrži markere
parametara – argumenti su handle na naredbu, pozicija parametra u
naredbi, tip parametra, tip podatka parametra u pregramu, tip podatka polja u tabeli i vrednost parametra
22
Poziv funkcije SQLExecute() za izvršenje SQL naredbe33
Poziv funkcije SQLBindParameter() kojom
se postavljaju vrednosti parametara ukoliko naredba sadrži markere parametara
11
Poziv funkcije SQLExecDirect() gde se kao
argument prosleđuje SQL naredba
22
U slučajevima kada se koristi SELECT naredba kao rezultat
izvršenja se dobija kolekcija n-torki koje zadovoljavaju zadati
uslov pretraživanja, a ta kolekcija se smešta u poseban memorijski
prostor (bafer)
ODBC omogućava i standardni način za pozivanje procedura baza podataka – preko funkcije SQLExecDirect(), gde se ?
Koristi kao marker parametra procedure
Sintaksa za poziv procedure je:
{ [ ? = ] call procedure_name [ (?, ?, ...) ] }
Za izlazne parametre mora se postaviti marker parametra u pozivu procedure, a pozivom funkcije SQLBindParameter() vezati programska
promenljiva za izlazni parametar procedure baze podataka
Poziv procedure baze podataka koja vraća generisan broj računa posle ubacivanja nove n-torke u tabelu Racun
PRIMER
retcode = SQLBindParameter (stmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_LONG, 0, 0, brojRacuna, 0, NULL);
retcode = SQLExecDirect (stmt, “ { ?=call DodajRacun (?, ’08.12.2008.’, ‘Milorad’, 347.80 ) } ”, SQL_NTS);
Ažuriranje tabele baze podataka moguće je izvršiti korišćenjem podataka iz “tekućeg” reda imenovanog
kursora definisanog nad tabelom koja se ažurira
Tekući kursor definiše n-torku koja se izbacuje ili menja iskazom CURRENT OF u WHERE klauzuli – naziv kursora može se postaviti iz
same aplikacije pozivom funkcije SQLSetCursorName(), a može i da ga ODBC driver automatski dodeli i tada se iščitava korišćenjem funkcije
SQLGetCursorName()
UPDATE naziv-tabeleSET identifikator-kolone = { izraz | NULL }
[, identifikator-kolone = { izraz | NULL }] ...WHERE CURRENT OF naziv-kursora
Sintaksa SQL naredbe za izmenu vrednosti u n-torci je:
DELETE FROM naziv-tabele WHERE CURRENT OF naziv-kursora
Sintaksa SQL naredbe za izbacivanje n-torke je:
Za upravljanje transakcijama je odgovoran programer
Ako se pozove funkcija za izvršenje SQL naredbe a ne postoji otvorena transakcija, ODBC driver automatski započinje novu
transakciju
Transakcija ostaje otvorena sve dok se ne potvrdi ili poništi eksplicitnim pozivom ODBC funkcije SQLTransact(), gde je
vrednost njenog parametra COMMIT ili ROLLBACK
Na kraju svakog programa koji koristi ODBC biblioteku funkcija trebalo bi osloboditi sve memorijske resurse alocirane za ODBC
okruženje i konekcije – funkcije SQLDisconnect() i SQLFreeHandle()
// Oslobadjane zauzetog prostoraSQLDisconnect(con);SQLFreeHandle(SQL_HANDLE_DBC, con);SQLFreeHandle(SQL_HANDLE_ENV, henv);
Alternative implementacij
e JDBC drajvera
JDBC – Java DataBase Connectivity
Standardni Java interfejs za povezivanje Jave sa relacionim bazama podataka definisan od
strane Sun MicrosystemsOmogućava Java
aplikacijama, apletima i servletima pristup
bazama podataka kao i drugim tabelarnim izvorima podataka
JDBC Middleware
Protocol
Java aplikacijaJDBC API
JDBC Driver Manager
JDBC-Net driver
JDBC-ODBC Bridge driver
JDBC arhitektura
ODBC drivers
Nativ-API driver
(party-Java)
Nativ-protocol driver
Odgovarajući SUBP protokoli
Definiše standardni pritup Java
programa bazi podataka
Posrednik između Java programa i drajvera (uslužni
programi između Java programa i konkretnih SUBP-
ova)
Omogućava troslojnu arhitekturu sistema jer JDBC pozive prosleđuje na srednji sloj – server na srednjem
sloju prevodi zahteve klijenata u pozive funkcija baze podataka
Prevodi sve JDBC pozive u ODBC pozive i prosleđuje ih ODBC
drajveru – ODBC drajver je najčešće prisutan na klijentskoj strani pa je
pristup bazi na strani klijenta
Prevodi JDBC pozive u specifične pozive funkcija definisane od proizvođača SUBP-a
kao što su SQL Server, Oracle ili Sysbase – na svakoj klijentskoj mašini mora se učitati
biblioteka funkcija specifičnog SUBP-a, a ne može da se koristi za Web aplikacije
Konvertuje JDBC pozive u specifičan SUBP protokol tako da klijentska aplikacija može da komunicira
direktno sa bazom podataka – nije potreban specifičan softver (dinamička
instalacija)
Koncepti koji se koriste u Java programima za pristup bazi podataka su slični ODBC-u, s tom razlikom što je JDBC
objektno orijentisan
Neophodan je korak učitavanja drajvera za bazu podataka koja se koristi, koji može biti instalaciono i implementaciono zavisan
Na taj način se kreira objekat DriverManager, što je analogno kreiranju okruženja u prvom koraku korišćenja ODBC-a
Metoda getConnection() klase DriverManager se koristi za uspostavljanje konekcija sa bazom podataka i zahteva kao argument
URL kojom se identifikuje baza podataka, korisničko ime i lozinka – kreira se objekat tipa Connection što je analogno ODBC konekciji
Za kreiranje SQL naredbe se koristi metoda createStatement() objekta tipa Connection – kreira se objekat tipa Statement
SQL naredbe koje se koriste u programima se mogu podeliti na upite i naredbe ažuriranja
Metodom executeQuery(Q), gde se kao argument zahteva tekst
naredbe Q, se “traži” izvršenje SQL naredbe
Metoda executeUpdate(Q), kao argument se zahteva tekst naredbe
Q, ne vraća rezultat
Za kreiranje parametrizovane naredbe se koristi metoda preparedStatement(Q) koja kao argument ima tekst
naredbe Q
Parametri se definišu u tekstu SQL naredbe preko znaka pitanja koji čuvaju mesto za odgovarajuće argumente u trenutku izvršavanja
naredbe
Nakon kreiranja odgovarajućeg objekta a pre izvršenja naredbe potrebno je dodeliti vrednosti odgovarajućim parametrima pomoću metode
set<SQLTIP>(i,v)
i – redni broj pojavljivanja parametra u naredbi
v – vrednost parametra koji po tipu odgovara pozvanoj metodi
Izvršavanje naredbe je omogućeno preko metoda executeUpdate() i executeQuery()JDBC omogućava i standardni način za pozivanje procedura baza
podataka
Korišćenjem objekta tipa CallableStatement, čije je kreiranje omogućeno preko metode prepareCall
Znak pitanja se koristi kao oznaka za parametre procedure, a ukoliko procedura vraća vrednosti tada ih je neophodno registrovati pre poziva
korišćenjem metode registerOutParameter
Objekat tipa ResultSet je moguće koristiti i za ažuriranje tabele baze podataka
Moguće je dodati novi red ili obrisati postojeći, izmeniti polja u nekoj n-torki
Potrebno je prilikom kreiranja naredbe postaviti odgovarajuće vrednosti parametara, tj. omogućiti navigaciju kroz rezultujući set i njegovo ažuriranje
Za kreiranje nove n-torke u rezultujućem setu potrebno je izvršiti pozicioniranje na novu n-torku a nakon popunjavanja polja preneti
podatke u bazu podataka pozivom metode insertRow()
Za izmenu polja tekuće n-torke u rezultujućem setu koriste se
metode update<SQLTip>(i,v)
Da bi se izmene prenele u bazu podataka za postojeće n-torke u
rezultujućem setu koriste se metode updateRow() i
deleteRow()
Upravljanje transakcijama – za transakciju je odgovoran korisnik
U opštem slučaju Connection objekat ima postavljenu auto-commit opciju kojom se svaka SQL naredba definiše kao transakcija, a uključuje implicitan
commit i rollback
Menjanje difolt karakteristika, tj. uključivanje transakcija se vrši nad Connection objektom i to preko metoda setTransactionIsolation i
setAutoCommit
Moraju se eksplicitno definisati naredbe za kontrolu transakcija commit i rollback
Osnovni objekti ADO komponente:
ADO – (Microsoft) ActiveX Data Objects
Omogućava klijentskim aplikacijama pristup i manipulaciju sa podacima iz baza podataka
preko odgovarajućeg OLEDB provider-aOsobine: lakoća
korišćenja, velika brzina pristupa, malo zauzeće memorije.
Specifičan servis nižeg nivoa za pristup konkretnom sistemu za upravljanje bazom
podataka ili nekom drugom izvoru podataka
Connection – jedinstvena sesija ka izvoru podataka, nad njim se može pozvati metoda Execute() koja direktno
izvršava SQL naredbuxx
Command – služi za pripremanje i izvršavanje SQL naredbe koja može biti parametrizovana, poseduje kolekciju
Parameters koja sadrži jedan ili više parametara koji su objekti klase Parameter
xx
Recordset – sadrži rezultate SELECT upita nad bazom podataka i omogućava manipulaciju sa podacima redova iz
rezultata
xx
.NET Provider
ADO.NET
Javlja se sa pojavom novog razvojnog okruženja .NET, kao njegov sastavni deo
Radikalno izmenjena tehnologija pristupa bazama podataka u poređenju sa ADO
Dizajniran za korišćenje u intranet i Internet aplikacijama, dok se ADO koristi u Windows aplikacijama koje komuniciraju preko DCOM
Data relations
Connection
ADO.NET arhitektura
Data tablesData tables
Data tables
DMBSClient
.NET Managed Code
DataSet
Command
DataAdapter
XML Dokumen
t
Rezultat nekog upita
Uspostavljanje i održavanje veza između
DataTableSerijalizovanje, transformisanje u XML format DataSet-a – omogućva se prikaz u bilo kom
brauzeru i prenos preko Interneta korišćenjem HTTP-aOmogućuje pristup izvorima podataka
za klijentsku aplikaciju u .NET okruženju Pristup određenom izvoru podataka,
prosleđivanje upita do baze podataka i prebacivanje rezultata upita u DataSet
– korišćenjem atributa SelectCommand
Vrši i dodavanje, izmenu i brisanje n-torki u bazi podataka – na osnovu
atributa InsertCommand, UpdateCommand i DeleteCommand
Procedure baze podataka – Persistent stored module (PSM)
PSM procedure i funkcije predstavljaju samostalne programske celine koje se u šemi baze podataka identifikuju preko svog imena
SQL/PSM definiše sintaksu i semantiku jezika za rad sa bazom podataka koji se odnosi na deklarisanje i
manipulisanje perzistentnim rutinama u SQL-server modulima
Termin kojim se jednim imenom objedinjuju procedure, funkcije i metode
Metode se definišu u kontekstu korisnički-definisanih tipova
SQL/PSM moduli se definišu kao kolekcije procedura i funkcija
ProcedureCREATE PROCEDURE <naziv> ([<vrstaParam nazivParam tipParam>, …])
lokalne_deklaracijeBEGIN
izvrsne_naredbeEND;
Mogu ali ne moraju imati parametre, gde vrsta
parametra može biti IN, OUT i INOUT, a tip parametra može biti neki od definisanih SQL tipova: INTEGER, REAL, ...
IN parametri – parametri koji se prenose kao ulazni, tj. prilikom poziva imaju definisanu
vrednost i ne mogu se menjati u telu procedure
OUT parametri – parametri koje procedura vraća kao izlazne, tj. prilikom poziva nemaju
definisanu vrednost i dobijaju je u telu procedure
INOUT parametri – parametri koji se prenose kao ulazni, a procedura ih vraća kao izlazne, tj. prilikom
poziva imaju definisanu vrednost i dobijaju vrednost u telu procedure
FunkcijeCREATE FUNCTION <naziv> ([<nazivParam tipParam>, …]) RETURNS <SQLtip>
lokalne_deklaracijeBEGIN
izvrsne_naredbeEND;
Funkcije imaju RETURNS klauzulu i svi parametri funkcije moraju biti IN
parametri – ne mogu da se koriste ostale oznake vrste
parametra
Sve promenljive koje se koriste u izvršnom delu PSM rutina moraju biti deklarisane
DECLARE lBroj INTEGER;DECLARE lKol REAL = 0;DECLARE lDatum DATE = NULL;
Osnovnu strukturu PSM rutina (i funkcija i procedura) čine deklaracije
SQL promenljivih i izvršni deo koji čini blok naredbi definisan između
BEGIN i END
PSM promenljive se u SQL naredbama koriste bez ikakvog prefiksa, samo navođenjem naziva promenljive – treba
izbegavati nazive koji su isti kao i nazivi objekata u šemi baza podataka
Osnovne naredbe koje se koriste u PSM rutinama su SQL naredbe, a one se pišu u izvršnom delu programa
CREATE PROCEDURE kreirajRacun (IN pKupac VARCHAR[80])DECLARE pBroj INTEGER;DECLARE pDatum DATE;
BEGINSET pBroj = 10;SET pDatum = CURRENT_DATE;INSERT INTO Racun (brojRacuna, datum, nazivKupca)VALUES (pBroj, pDatum, pKupac);
END;
Kao i u SQL-u i u PSM rutinama se koriste relacioni operatori (=, !=, <, <=, >, >=), aritmetički operatori (+, -, *, /) i logički operatori (AND, OR i NOT), kao i SQL
funkcije osim grupnih funkcija –AVG, SUM, MIN, MAX, COUNT
U izrazima koji se pišu van SQL naredbi mogu učestvovati samo promenljive deklarisane u PSM rutini
PSM moduli sadrže naredbe za upravljanje tokom izvršavanja programa: selekcije (IF THEN ELSE i CASE), iteracije (LOOP, WHILE i REPEAT) i promene toka (LEAVE i
ITERATE)
Za SQL upite koji vraćaju tačno jednu n-torku može se koristiti naredba SELECT INTO kojom se rezultat upita smešta u
promenljive deklarisane u PSM rutini
Ukoliko SQL naredba vraća više n-torki koristi se kursor koji omogućava pristup n-torkama rezultata zapis po zapis
Manipulacija kursorom je omogućena preko naredbi OPEN, FETCH i CLOSE
Definisan je i drugi način korišćenja kursora preko for konstrukcije – omogućava navigaciju kroz kursor bez
eksplicitnog otvaranja i zatvaranja kursora
Za obradu grešaka se koristi poseban koncept koji se zove izuzetak (EXCEPTION)
Ovaj mehanizam se može podeliti u dva dela: pokretanje izuzetka (najčešće obavlja SUBP, a ponekad i programer) i obrada izuzetka
(isključivo zadatak programera)
Koristi se naredba SIGNAL iza koje se piše naziv izuzetka Potrebno je deklarisati hendler kojim se
definiše akcija obrade (CONTINUE, EXIT ili UNDO)
PSM procedure i funkcije predstavljaju objekte šeme baze podataka – omogućeno je njihovo kreiranje – CREATE, izmena – ALTER i
izbacivanje - DROP
SQL dozvoljava postojanje više rutima sa istim nazivom - polimorfizam
Zato sve rutine imaju dva naziva – drugi je identifikator rutine u šemi baze podataka
Osim imena rutine za njenu manipulaciju se mogu definisati i druge klauzule, kao što je indikacija pristupa SQL
NO SQL – ne sadrži SQL naredbeCONTAINS SQL – sadrži samo SQL naredbe
READS SQL DATA – sadrži samo SQL naredbe koje čitaju podatkeMODIFIES SQL DATA – sadrži naredbe koje menjaju podatke u bazi
podatala
Procedure baze podataka se mogu pozivati sa strane klijenta – pa se može definisati kontrola pristupa i
sigurnost BP jer se korisnicima daje pravo da pozovu proceduru ali im se onemogućava direktan pristup
tabelama
Prof. dr Milorad Banjanin
HVALA NA HVALA NA PAŽNJIPAŽNJI