Baze podataka i razvoj aplikacija - PowerPoint PPT Presentation

1 / 30
About This Presentation
Title:

Baze podataka i razvoj aplikacija

Description:

Title: PowerPoint Presentation Last modified by: M.B. Created Date: 1/1/1601 12:00:00 AM Document presentation format: On-screen Show (4:3) Other titles – PowerPoint PPT presentation

Number of Views:110
Avg rating:3.0/5.0
Slides: 31
Provided by: ffuisEduB
Category:

less

Transcript and Presenter's Notes

Title: Baze podataka i razvoj aplikacija


1
Baze podataka i razvoj aplikacija
  • Prof. dr MILORAD K. BANJANIN
  • Univerzitet u Istocnom Sarajevu
  • Tehnološki fakultet Zvornik

2
Arhitektura softverskog sistema koji koristi bazu
podataka
Desktop aplikacija
HTML klijent
Neophodno je omoguciti razvoj složenih
programskih sistema koji koriste bazu podataka
HTTP
relacioni sistem za upravljanje bazom podataka
interpretira SQL upit i daje odgovarajuci
tabelarni rezultat
Web server
ASP
JSP
Servlet
Web servis
HTML/DHTML/XML
RMI-IIOP DCOM
Aplikacioni server
EJB
.NET
BC4J
COM
Baza podataka
Procedure baze podataka
3
Opšti nacin komunikacije programskih sistema sa
bazom podataka
Aplikacija
SQL ili poziv procedure
SQL ili poziv procedure
SQL-klijent
Call Level Interface
Embedded SQL
SUBP interfejsi
SUBP interfejsi
SQL-klijent servisi
Lokalni pristup
Udaljeni pristup
SQL-server
Procesor baze podataka
Baza podataka
SUBP
4
SQL unutar klasicnih 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 klasicnih i objektnih
programskih jezika (C, Fortran, Pascal, Java,
...), za razvoj aplikativnih programa
naredbe programskog jezika koje se koriste,
jezika domacina, i SQL naredbe su pomešane
Osnovni koncepti ce biti objašnjeni na
programskom jeziku C, ali se u potpunosti sve
odnosi i na ostale konvencionalne i objektne
jezike
Primeri ce 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)
5
Programi pisani pomocu ugradenog SQL-a
omogucavaju
Procesiranje aplikacionog programa sa SQL-om
unutar programskih jezika
Jezik domacin SQL naredbe
Pretprocesor
Jezik domacin Poziv funkcija
Prevodilac jezika domacina
Izvršni program (aplikacija)
Sintaksna i semanticka provera
SQL biblioteka funkcija
Baza podataka
6
SQL naredbe se koriste u
Deklarativnom delu programa
Proceduralnom delu programa
Deklaracija HOST promenljivih vrši se u sekciji
deklaracije
EXEC SQL BEGIN DECLARE SECTION int hBroj, hRb,
hSifra, hIndikator VARCHAR hNaziv50 float hK
ol, hStopa float hIznPor, hIzn, hCena EXEC SQL
END DECLARE SECTION
U slucajevima kada je rezultat upita SELECT ...
FROM ... WHERE ... samo jedna n-torka, naredba
SELECT se proširuje sa klauzulom INTO koja
omogucava smeštanje rezultata upita u HOST
promenljive
EXEC SQL SELECT ProdajnaCena INTO
hCena FROM Proizvod WHERE sifraProizvoda
hSifra
Ukoliko program treba da radi sa nula vrednostima
mora se koristiti indikator promenljive
hIndikator -1 EXEC SQL UPDATE Racun SET ukupan
Iznos hIznhIndikator WHERE sifraProizvoda
hSifra
7
SQL naredbe se koriste u
Deklarativnom delu programa
Proceduralnom delu programa
EXEC SQL DECLARE ltime-kursoragt CURSOR FOR
ltselectNaredbagt
PRIMER
EXEC SQL DECLARE cSt CURSOR FOR SELECT RbStavke,
Kolicina, ProcenatPoreza, IznosPoreza FROM Stavka
Racun WHERE brojRacuna hBroj
Deklaracija kursora nije izvršna naredba, mada se
pojavljuje u proceduralnom delu programa.
Izvršne operacije nad kursorom su
EXEC SQL OPEN ltime-kursoragt
EXEC SQL FETCH ltime-kursoragt INTO
ltime-programske-promgt
EXEC SQL CLOSE ltime-kursoragt
8
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 razlicitim implementacijama SQL-a kursori se
razlikuju po sledecim osobinama
Ukoliko se kursor definiše sa opcijom SCROLL pre
kljucne reci CURSOR onda se omogucava i nekoliko
opcija za pristup željenon n-torki NEXT ili
PRIOR, FIRST ili LAST, RELATIVE i ABSOLUTE
9
Ažuriranje baze podataka
Standardne SQL naredbe
INSERT
UPDATE
INSERT
Kursor
Mora biti definisan nad jednom baznom tabelom ili
jednim pogledom
hBroj 10 strcopy (hNaziv, Milorad) EXEC SQL
INSERT INTO RACUN (BrojRacuna, Datum,
NazivKupca) VALUES (hBroj, CURRENT_DATE,
hNaziv)
Pojava greške pri izvršavanju SQL naredbi ne
dovodi do prekida izvršavanja programa
Neophodno je u svakom programu na odgovarajuci
nacin obradivati greške, a postoje dva nacina za
to
Akcije su CONTINUE, STOP ili GOTO
10
Dinamicki SQL omogucava 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 promenljivoj
Proces formiranja i izvršavanja dinamickih SQL
naredbi se sastoji od
formiranja teksta SQL naredbe na osnovu ulaznih
podataka
pripremanja naredbe za izvršavanje, odnosno vrši
se procesiranje naredbe
povezivanja HOST promenljive sa parametrima SQL
naredbe
izvršavanja SQL naredbe
Postoje cetiri razlicita nacina za izvršavanje
dinamicke SQL naredbe
11
SQLJ predstavlja deo SQL1999 standarda koji
definiše nacin umetanja SQL naredbi u okviru
objektnog programskog jezika Java
I u ovom slucaju su SQL naredbe podeljene na
deklarativne i izvršne, s tim što SQL naredbe
pocinju sa sql
Ne postoji posebna deklaracija promenljivih koje
ce se koristiti u SQL naredbi što znaci da se
može koristiti bilo koja Java promenljiva
Promenljive se takode koriste sa (dvotackom)
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
12
Objekat klase ITERATOR
Koristi se ukoliko SELECT naredba vraca veci broj
n-torki
// deklaracija imenovanog iteratora sql iterator
StavkaIter int rb, float kolicina, int proizvod

// deklaracija pozicionog iteratora sql iterator
StavkaIter int, float, int
Za navigaciju kroz iterator se koristi metoda
next() koja vraca 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 pomocu
FETCH...INTO naredbe, a host promenljive moraju
biti u odgovarajucem broju i redosledu tipa
deklarisanog u pozicionom kursoru
13
Pristup bazama podataka preko poziva funkcija
Do sada su baze podataka bile korišcene iz
programskih jezika medanjem naredbi programskog
jezika i upitnog jezika
Druga mogucnost je korišcenje funkcija preko
kojih se SUBP-u prosleduje tekst upita koji on
izvršava i vraca programu odgovarajuci rezultat
SQL/CLI
ODBC, JDBC, ADO, ADO.NET
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
14
ODBC arhitektura
Aplikacija
ODBC interfejs
ODBC Driver Manager
SQL Server ODBC Driver
ORACLE ODBC Driver
... ODBC Driver
Osnovne funkcije ODBC biblioteke bice objašnjene
korišcenjem programskog jezika C na sledecim
relacionim modelomlt
SQL Server
ORACLE
...
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 pocetku je potrebno prikljuciti
neophodne header datoteke u kojima se nalaze
definicije funkcija, tipova podataka, struktura i
konstanti
15
include ltsql.hgt include ltsqlext.hgt include
ltsqltypes.hgt include ltodbcss.hgt
Prikljucivanje tih header datoteka obezbeduje
kreiranje i manipulaciju sa sledecim vrstama
rekorda (struktura u C-u)
U programu su te strukture reprezentovane preko
pokazivaca na njih, koji se zovu handle
SQLHENV henv SQL_NULL_HENV SQLHDBC CON
SQL_NULL_HDBP SQLHSTMT stmt SQL_NULL_HSTMT
16
Inicijalizacija pokazivaca na strukturu koja
predstavlja ODBC okruženje je uvek prvi korak u
aplikaciji
Bez tog alociranja memorijskog prostora nije
moguce koristiti ni jednu funkciju ODBC
biblioteke, medutim trebalo bi alocirati jedan i
samo jedan handle na ODBC okruženje
Alociranje memorijskog prostora vrši se pozivom
funkcije SQLAllocHandle(), ciji je argument vrsta
pokazivaca ona vraca 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
pokazivac 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)
17
Nacini specificiranja i izvršenja SQL naredbe
Pripremljeno izvršenje (prepared execution)
Direktno izvršenje (direct execution)
U slucajevima 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)
18
ODBC omogucava i standardni nacin 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
PRIMER
Poziv procedure baze podataka koja vraca
generisan broj racuna posle ubacivanja nove
n-torke u tabelu Racun
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)
19
Ažuriranje tabele baze podataka moguce je
izvršiti korišcenjem podataka iz tekuceg reda
imenovanog kursora definisanog nad tabelom koja
se ažurira
Tekuci 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šcitava korišcenjem funkcije
SQLGetCursorName()
Sintaksa SQL naredbe za izmenu vrednosti u
n-torci je
UPDATE naziv-tabele SET identifikator-kolone
izraz NULL , identifikator-kolone
izraz NULL ... WHERE CURRENT OF
naziv-kursora
Sintaksa SQL naredbe za izbacivanje n-torke je
DELETE FROM naziv-tabele WHERE CURRENT OF
naziv-kursora
20
Za upravljanje transakcijama je odgovoran
programer
Ako se pozove funkcija za izvršenje SQL naredbe a
ne postoji otvorena transakcija, ODBC driver
automatski zapocinje 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 prostora SQLDisconnect(con
) SQLFreeHandle(SQL_HANDLE_DBC,
con) SQLFreeHandle(SQL_HANDLE_ENV, henv)
21
JDBC Java DataBase Connectivity
Standardni Java interfejs za povezivanje Jave sa
relacionim bazama podataka definisan od strane
Sun Microsystems
JDBC arhitektura
Java aplikacija
JDBC API
JDBC Driver Manager
JDBC-Net driver
JDBC-ODBC Bridge driver
Nativ-API driver (party-Java)
Nativ-protocol driver
Alternative implementacije JDBC drajvera
ODBC drivers
JDBC Middleware Protocol
Odgovarajuci SUBP protokoli
22
Koncepti koji se koriste u Java programima za
pristup bazi podataka su slicni ODBC-u, s tom
razlikom što je JDBC objektno orijentisan
Neophodan je korak ucitavanja drajvera za bazu
podataka koja se koristi, koji može biti
instalaciono i implementaciono zavisan
Na taj nacin se kreira objekat DriverManager, što
je analogno kreiranju okruženja u prvom koraku
korišcenja ODBC-a
Metoda getConnection() klase DriverManager se
koristi za uspostavljanje konekcija sa bazom
podataka i zahteva kao argument URL kojom se
identifikuje baza podataka, korisnicko 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
23
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 cuvaju mesto za odgovarajuce
argumente u trenutku izvršavanja naredbe
Nakon kreiranja odgovarajuceg objekta a pre
izvršenja naredbe potrebno je dodeliti vrednosti
odgovarajucim parametrima pomocu metode
setltSQLTIPgt(i,v)
Izvršavanje naredbe je omoguceno preko metoda
executeUpdate() i executeQuery()
JDBC omogucava i standardni nacin za pozivanje
procedura baza podataka
Korišcenjem objekta tipa CallableStatement, cije
je kreiranje omoguceno preko metode prepareCall
Znak pitanja se koristi kao oznaka za parametre
procedure, a ukoliko procedura vraca vrednosti
tada ih je neophodno registrovati pre poziva
korišcenjem metode registerOutParameter
24
Objekat tipa ResultSet je moguce koristiti i za
ažuriranje tabele baze podataka
Moguce je dodati novi red ili obrisati postojeci,
izmeniti polja u nekoj n-torki
Za kreiranje nove n-torke u rezultujucem setu
potrebno je izvršiti pozicioniranje na novu
n-torku a nakon popunjavanja polja preneti
podatke u bazu podataka pozivom metode insertRow()
Upravljanje transakcijama za transakciju je
odgovoran korisnik
U opštem slucaju Connection objekat ima
postavljenu auto-commit opciju kojom se svaka SQL
naredba definiše kao transakcija, a ukljucuje
implicitan commit i rollback
Menjanje difolt karakteristika, tj. ukljucivanje
transakcija se vrši nad Connection objektom i to
preko metoda setTransactionIsolation i
setAutoCommit
25
ADO (Microsoft) ActiveX Data Objects
Omogucava klijentskim aplikacijama pristup i
manipulaciju sa podacima iz baza podataka preko
odgovarajuceg OLEDB provider-a
Osnovni objekti ADO komponente
26
ADO.NET
Javlja se sa pojavom novog razvojnog okruženja
.NET, kao njegov sastavni deo
ADO.NET arhitektura
Connection
Data relations
XML Dokument
Command
Data tables
Data tables
Data tables
DataAdapter
.NET Provider
DataSet
DMBS
Client
.NET Managed Code
27
Procedure baze podataka Persistent stored
module (PSM)
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
PSM procedure i funkcije predstavljaju samostalne
programske celine koje se u šemi baze podataka
identifikuju preko svog imena
Metode se definišu u kontekstu korisnicki-definisa
nih tipova
SQL/PSM moduli se definišu kao kolekcije
procedura i funkcija
Procedure
Funkcije
CREATE PROCEDURE ltnazivgt (ltvrstaParam nazivParam
tipParamgt, ) lokalne_deklaracije BEGIN izvrsne
_naredbe END
CREATE FUNCTION ltnazivgt (ltnazivParam tipParamgt,
) RETURNS ltSQLtipgt lokalne_deklaracije BEGIN i
zvrsne_naredbe END
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
28
PSM promenljive se u SQL naredbama koriste bez
ikakvog prefiksa, samo navodenjem 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
VARCHAR80) DECLARE pBroj INTEGER DECLARE pDat
um DATE BEGIN SET 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 (, !, lt, lt, gt, gt),
aritmeticki operatori (, -, , /) i logicki
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
ucestvovati 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)
29
Za SQL upite koji vracaju tacno 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 vraca više n-torki koristi se
kursor koji omogucava pristup n-torkama rezultata
zapis po zapis
Za obradu grešaka se koristi poseban koncept koji
se zove izuzetak (EXCEPTION)
Ovaj mehanizam se može podeliti u dva dela
pokretanje izuzetka (najcešce obavlja SUBP, a
ponekad i programer) i obrada izuzetka
(iskljucivo zadatak programera)
PSM procedure i funkcije predstavljaju objekte
šeme baze podataka omoguceno je njihovo
kreiranje CREATE, izmena ALTER i izbacivanje
- DROP
SQL dozvoljava postojanje više rutima sa istim
nazivom - polimorfizam
Osim imena rutine za njenu manipulaciju se mogu
definisati i druge klauzule, kao što je
indikacija pristupa SQL
30
HVALA NA PAŽNJI
Prof. dr Milorad Banjanin
Write a Comment
User Comments (0)
About PowerShow.com