30
Baze podataka i razvoj aplikacija Prof. dr MILORAD K. BANJANIN Univerzitet u Istočnom Sarajevu Univerzitet u Istočnom Sarajevu Tehnološki fakultet Zvornik Tehnološki fakultet Zvornik

Baze podataka i razvoj aplikacija

  • Upload
    malaya

  • View
    59

  • Download
    1

Embed Size (px)

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 Presentation

Citation preview

Page 1: Baze podataka i razvoj aplikacija

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

Page 2: Baze podataka i razvoj aplikacija

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

Page 3: Baze podataka i razvoj aplikacija

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

Page 4: Baze podataka i razvoj aplikacija

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

Page 5: Baze podataka i razvoj aplikacija

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

Page 6: Baze podataka i razvoj aplikacija

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

Page 7: Baze podataka i razvoj aplikacija

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

Page 8: Baze podataka i razvoj aplikacija

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

Page 9: Baze podataka i razvoj aplikacija

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

Page 10: Baze podataka i razvoj aplikacija

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

Page 11: Baze podataka i razvoj aplikacija

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

Page 12: Baze podataka i razvoj aplikacija

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

Page 13: Baze podataka i razvoj aplikacija

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

Page 14: Baze podataka i razvoj aplikacija

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

Page 15: Baze podataka i razvoj aplikacija

#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;

Page 16: Baze podataka i razvoj aplikacija

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)

Page 17: Baze podataka i razvoj aplikacija

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)

Page 18: Baze podataka i razvoj aplikacija

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);

Page 19: Baze podataka i razvoj aplikacija

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:

Page 20: Baze podataka i razvoj aplikacija

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);

Page 21: Baze podataka i razvoj aplikacija

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)

Page 22: Baze podataka i razvoj aplikacija

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

Page 23: Baze podataka i razvoj aplikacija

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

Page 24: Baze podataka i razvoj aplikacija

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

Page 25: Baze podataka i razvoj aplikacija

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

Page 26: Baze podataka i razvoj aplikacija

.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

Page 27: Baze podataka i razvoj aplikacija

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

Page 28: Baze podataka i razvoj aplikacija

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)

Page 29: Baze podataka i razvoj aplikacija

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

Page 30: Baze podataka i razvoj aplikacija

Prof. dr Milorad Banjanin

HVALA NA HVALA NA PAŽNJIPAŽNJI