Sunteți pe pagina 1din 6

Cap. D.

Arhitectura i funcionalitatea aplicaiilor pentru baze de


date.

D2. Aplicatii Client / Server.

Tehnologia client/server imparte o aplicatie in trei componente de baza: un client, un server si o


retea care conecteaza clientul la server. Atat clientul cat si serverul sunt calculatoare cu grade variate de
putere de calcul, ce colaboreaza la indeplinirea sarcinilor.
In multe cazuri, calculatorul client este un calculator personal ca se afla pe biroul utilizatorului, pe care
ruleaza Microsoft Windows, sau Mac OS, si in situatii rare sunt statii de lucru Unix. Calculatorul server
este un server de retea, care poate fi un PC mai puternic, sau minicalulator sau mainframe. Reteaua est
necesara pntru a conecta clientul la server.
Tehnologia este potrivita pentru crearea de aplicatii de gestiune adaptate cerintelor
utilizatorului, care obtin accesul la datele de pe calculatoarele mainframe; dar si pentru dezvoltarea
aplicatiilor care realizeaza o legatura intre datele aflate pe mai multe sisteme de calcul, de obicei
incompatibile.
Distributia exacta a activitatii intre calculatoarele client si cele server variaza in functie de tipul
aplicatiei. Totusi, de obicei, calculatorul client este responsabil cu toate activitatile cerute de prezenta
intefetei, iar serverul este responsabil cu administrarea accesului la bazele de date. De obicei, sunt mai
multi clienti care se conecteaza la acelasi server, ceea ce constituie unul din marele avantaje al
tehnologiei client/server.
Daca pe calculatorul server ruleaza un sgbd, care asteapta cererile de la orice client (nu numai
aplicatia client la care ne referim) si le rezolva, atunci ramane ca in aplicatia noastra sa ne ocupam doar
de partea de client.
In majoritatea sistemelor client/server, calculatorul client are doua responsabilitati: gestiunea
prezentarii si logica aplicatiilor. Gestiunea prezentarii se refera la faptul ca el coordoneaza partea de
interactiune cu utilizatorul: afisarea ferestrelor, a casetelor de dialog, textelor, graficelor si elementelor
care mai apar pe ecran; preluarea datelor de la utilizator, prin intermediul tastaturii, sau a altor tipuri de
periferice de intrare. Logica aplicatiei consta in acea parte a programului care decide ce trebuie facut in
oricare din diferitele situatii.
Aplicatiile client/server pot fi realizate folosind un numar variat de instrumente de dezvoltare.
Pot fi folosite limbaje de programare traditionale (C, C++, Java, Visual Basic, etc), dar si instrumente
vizuale. De asemenea, un server de baze de date.
Dificultatea in proiectarea sistemelor client/server apare in general din nevoia de a asigura
functionarea impreuna a echipamentelor hardware si a produselor software de la diversi producatori.

Aplicatie

JDBC

SGBD

BD

Conectarea la o baza de date din aplicatia client

Accesul la o baza de date dintr-o aplicatie se face prin intermediul unui driver software, specific
tipului respectiv de baza de date. Acesta este responsabil cu accesul efectiv la datele stocate, fiind
legatura între aplicatie si baza de date. Orice interfata de acest tip trebuie sa asigure cateva functii de
baza pentru a permite unui program sa se conecteze la o baza de date SQL si sa aiba acces la datele
acesteia. De obicei sunt asigurate urmatoarele tipuri de apeluri:
- conectarea la un server de baze de date
- deconectarea de la un server de baze de date
- trimiterea unei instructiuni SQL catre server
- executarea unei instructiuni trimise anterior
- obtinerea codului de stare dupa executarea unei instructiuni
- informarea asupra modului si locului unde sa se returneze randurile din multimea rezultatelor
- aducerea a cate unui rand din multimea rezultatelor
Cele mai cunoscute si utilizate drivere sunt ODBC si JDBC.
ODBC (Open Database Connectivity) este o interfata software pentru lucrul cu baze de date,
lansat in 1992. El permite, printr-un procedeu unic, ca o aplicatie informatica sa manipuleze baze de
date, puse la dispozitie de Sisteme de Gestiune a Bazelor de Date (SGBD) diferite. A fost lansat de
Microsoft pentru sistemul Windows, ca o interfata generica, dar apoi alti producatori au creat variante
specifice pentru alte platforme, cum e Unix.

ODBC permite ca, printr-o interfata din sistemul de operare, sa se defineasca surse de date (
DNS = data name source) pentru diferite baze de date, de diferite tipuri, oricate. Acestea permit
automat unei aplicatii de a manipula baze de date puse la dispozitie de diverse SGBD. Pentru fiecare
dintre ele, un driver software permite manipularea bazelor de date prin utilizarea de interfata de
programare proprie SGBD-ului. Cand o cerere pentru o baza de date este facuta de o aplicatie
informatica, acaeasta cerere este transmisa driverului corespunzator. Numele acestuia si alte informatii
se gasesc in definitia sursei de date (DNS)

ODBC de la Microsoft este furnizat cu drivere pentru SGBD Access, FoxPro si SQL Server, ce
apartin tot Microsoft. Alte SGBD (Oracle, IBM, MySQL,...) furnizeaza drivere pentru produsele lor.

JDBC (Java Database Connectivity) este o interfata standard SQL de acces la baze de date, creata
de Sun Microsystems, pentru platforme Java. JDBC este constituita dintr-un set de clase si interfete scrise
în Java, furnizând mecanisme standard pentru proiectantii aplicatiilor de baze de date. El permite
aplicatiilor Java sa acceseze printr-o interfata comuna baze de date pentru care exista drivere JDBC.
Folosind JDBC este usor sa transmitem secvente SQL catre baze de date relationale. Cu alte cuvinte,
nu este necesar sa scriem un program pentru a accesa o baza de date Oracle, alt program pentru a accesa o
baza de date Sybase si asa mai departe. Este de ajuns sa scriem un singur program folosind API-ul JDBC
si acesta va fi capabil sa trimita secvente SQL bazei de date dorite.
Fiind robust, sigur, usor de folosit, usor de înteles, Java este un excelent limbaj pentru a dezvolta
aplicatii de baze de date. JDBC-ul vine sa sporeasca avantajele limbajului Java, oferind in completare
mecanismul de comunicare cu baze de date.
Accesul la o anumita baza de date din Java se face pe baza unui driver specific tipului bazei de date
pe care dorim s-o utilizam, fie via JDBC, fie via ODBC, folosind un bridge JDBC-ODBC (in acest caz,
apelurile JDBC sunt transformate în apeluri ODBC).

Ce face JDBC-ul?
In linii mari, JDBC face trei lucruri:
• stabileste o conexiune cu o baza de date
• trimite secvente SQL
• prelucreaza rezultatele
Pachetul care ofera suport pentru lucrul cu baze de date, din aplicatii Java, este java.sql.

Stabilirea conexiunii la o baza de date


implica doua operatii:
1. încarcarea în memorie a unui driver corespunzator
2. realizarea unei conexiuni propriu-zise
O conexiune (sesiune) la o baza de date reprezinta un context prin care sunt trimise secvente SQL si
primite rezultate. Intr-o aplicatie pot exista mai multe conexiuni simultan la baze de date diferite sau la
aceeasi baza.
Responsabile cu realizarea unei conexiuni sunt:
- clasa DriverManager, ce se ocupa cu înregistrarea driverelor ce vor fi folosite în aplicatie
- interfata Connection, descrie obiectele ce modeleaza o conexiune propriu-zisa cu baza de date

Odata ce un driver JDBC a fost încarcat în memorie cu DriverManager, acesta poate fi folosit la
stabilirea unei conexiuni cu o baza de date. Având în vedere faptul ca pot exista mai multe drivere
înregistrate în memorie, trebuie sa avem posibilitea de a specifica pe lânga identificatorul bazei de date
si driverul ce trebuie folosit. Aceasta se realizeaza prin intermediul unei adrese specifice, numita
JDBC URL, ce are urmatorul format:
jdbc:sub-protocol:identificator_baza_de_date
Câmpul sub-protocol denumeste tipul de driver ce trebuie folosit pentru realizarea conexiunii si poate fi
odbc, oracle, sybase, db2 si asa mai departe. Identificatorul bazei de date este un indicator specific
fiecarui driver care specifica baza de date cu care aplicatia doreste sa interactioneze. In functie de tipul
driver-ului acest identificator poate include numele unei masini gazda, un numar de port, numele unui
fisier sau al unui director, etc.
jdbc:odbc:testdb
jdbc:oracle:thin@ugal.com:1521:testdb
jdbc:sybase:testdb
jdbc:db2:testdb

La primirea unui JDBC URL, DriverManager-ul va parcurge lista driver-elor înregistrate în


memorie, pâna când unul dintre ele va recunoaste URL-ul respectiv. Daca nu exista nici unul potrivit,
atunci va fi lansata o exceptie de tipul SQLException, cu mesajul no suitable driver.
Metoda folosita pentru realizarea unei conexiuni este getConnection din clasa DriverManager si poate
avea mai multe forme:
Connection c = DriverManager.getConnection(url);
Connection c = DriverManager.getConnection(url, username, password);
Connection c = DriverManager.getConnection(url, dbproperies);
O conexiune va fi folosita pentru:
- crearea de secvente SQL ce vor fi folosite pentru interogarea sau actualizarea bazei
- aflarea unor informatii legate de baza de date (meta-date)
De asemenea, clasa Connection asigura suport pentru controlul tranzactiilor din memorie catre baza de
date prin metodele commit, rollback, setAutoCommit .

Efectuarea de secvente SQL


Odata facuta conectarea cu DriverManager.getConection(), se poate folosi obiectul
Connection rezultat pentru a se crea un obiect de tip Statements, cu ajutorul caruia putem trimite
secvente SQL catre baza de date. Cele mai uzuale comenzi SQL sunt cele folosite pentru:
1. interogarea bazei de date (SELECT)
2. actualizarea bazei de date (INSERT, UPDATE, DELETE)
Exemplu:
Connection c = DriverManager.getConnection(url);
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM un_tabel ORDER BY
o_coloana");
Metoda executeQuery trimite interogari SQL catre baza de date si primeste raspuns într-un obiect de
tip ResultSet.

Obtinerea si prelucrarea rezultatelor. Interfata ResultSet


Exemplu:
String query = "SELECT cod, nume FROM localitati ORDER BY nume";
ResultSet r = s.executeQuery( query );
while (r.next()) {
System.out.println ( r.getString ("cod") + "," +
r.getString ("nume") );
}
Obtinerea de metadate. Interfata ResultSetMetaData
ResultSet r = s.executeQuery(" SELECT * FROM localitati" );
ResultSetMetaData rsmd = r.getMetaData();
System.out.println("Coloane: " + rsmd.getColumnCount());

S-ar putea să vă placă și