Sunteți pe pagina 1din 13

Cap.

4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

CAPITOLUL 4

BIBLIOTECI ŞI LIMBAJE DE PROGRAMARE A


APLICAŢIILOR DE BAZE DE DATE

Aplicaţiile de baze de date sunt, în general, mult mai


complexe decât alte categorii de aplicaţii, deoarece trebuie să
realizeze, pe de o parte interfaţa cu sistemele de gestiune a
bazelor de date, pentru introducerea şi extragerea datelor, iar pe
de altă parte, interfaţa cu utilizatorii, astfel încât aceştia să
poată efectua diferite operaţii. Pe lângă aceste funcţii de
interfaţare, programele de aplicaţii de baze de date trebuie să
implementeze şi algoritmii de calcul necesari.
Interfeţele cu utilizatorii sunt, în general, interfeţe grafice,
cunoscute sub numele de formulare (forms). Prin intermediul
controalelor (ferestre cu diferite funcţionalităţi) din cadrul
formularelor, utilizatorii sunt ghidaţi să introducă numai datele
strict necesare, de cele mai multe ori prin selectarea lor din mai
multe valori prezentate (valide), astfel încât să se limiteze
posibilitatea introducerii unor date eronate. Rezultatele
operaţiilor cerute de utilizatori sunt afişate, de asemenea în
formulare şi pot fi tipărite la dorinţă, sub formă de rapoarte. De
exemplu, o aplicaţie de gestiune a stocurilor oferă o interfaţă
grafică utilizatorilor, prin intermediul căreia aceştia pot să
introducă în baza de date diferite informaţii (cantităţi de
mărfuri intrate sau ieşite etc.); programul calculează diferiţi
indicatori de gestiune (nivelul stocurilor, dinamica stocurilor
etc.) şi afişează sau tipăreşte rezultatele calculate.
Interfeţele grafice cu utilizatorii se pot realiza prin
tehnologii software de uz general, dar multe sisteme de
dezvoltare a bazelor de date oferă suport pentru dezvoltarea
acestora. De exemplu, Microsoft Access permite dezvoltarea
vizuală a aplicaţiilor, inclusiv formularele de interfaţă; sistemul

129
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

de dezvoltare Oracle conţine utilitarul Oracle Forms, care


permite crearea interfeţelor grafice cu utilizatorii etc.
Sistemele de gestiune a bazelor de date relaţionale
prelucrează instrucţiuni (comenzi) SQL. Limbajul SQL (în
oricare din standardele definite până în prezent), este un limbaj
neprocedural, care permite definirea datelor şi operaţii de
manipulare a acestora, dar nu prevede instrucţiuni de control a
ordinii de execuţie a operaţiilor. De aceea, pentru realizarea
aplicaţiilor de baze de date au fost dezvoltate o multitudine de
limbaje şi biblioteci de programare: limbaje procedurale de
extensie a limbajului SQL, limbajul SQL integrat, biblioteci de
funcţii sau de clase pentru comunicarea cu bazele de date.
Un limbaj procedural (procedural language), este o
extensie a limbajului SQL şi permite combinarea
instrucţiunilor SQL cu instrucţiuni de control al ordinii de
execuţie. Astfel de limbaje sunt folosite în principal în cadrul
sistemelor de gestiune, pentru stocarea unor proceduri de
calcul, dar există şi posibilitatea ca programele de aplicaţii să
transmită sistemului SGBD blocuri (loturi) de instrucţiuni într-
un limbaj procedural. Transmiterea unui bloc de instrucţiuni în
locul transmiterii individuale a fiecărei instrucţiuni SQL,
asigură performanţe de execuţie a aplicaţiilor mai ridicate,
datorită reducerii traficului în reţea.
Majoritatea sistemelor de gestiune sunt prevăzute cu cel
puţin un limbaj procedural, cele mai cunoscute fiind: PL/SQL
pentru sistemele de gestiune Oracle, Transact-SQL pentru
sistemele de gestiune Microsoft SQL Server, PL/PGSQL şi
PL/Pearl pentru sistemul de gestiune PostgreSQL etc.
Pentru dezvoltarea programelor de aplicaţii de baze de date
se pot aborda două tehnologii diferite:
• Limbajul SQL integrat într-un limbaj de nivel înalt.
• Interfeţe de programare a aplicaţiilor.
În limbajul SQL integrat (Embeded SQL), instrucţiunile
limbajului SQL sunt incluse direct în codul programului sursă

130
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

scris într-un limbaj gazdă de nivel înalt (Ada, PL/1, Pascal,


Fortran, Cobol, C). Controlul fluxului de operaţii este realizat
prin instrucţiunile limbajului gazdă, iar operaţiile cu baza de
date sunt realizate prin instrucţiuni SQL.
Interfeţele de programare a aplicaţiilor (Application
Programming Interface - API) sunt dezvoltate ca biblioteci de
funcţii sau de clase, iar programele de aplicaţie folosesc apelul
funcţiilor prevăzute de interfaţa respectivă pentru a comunica
cu serverul bazei de date.
Interfeţele de programare a aplicaţiilor permit dezvoltarea
aplicaţiilor de baze de date prin apeluri de funcţii (call-level
interface – CLI) într-o manieră flexibilă, uşor de dezvoltat şi de
întreţinut. Interfeţele separă programul de aplicaţie de
biblioteca de acces la baza de date, iar această separare oferă
modularitate, stabilitate şi independenţă mai ridicată a
aplicaţiilor.
Fiecare dintre aceste limbaje şi biblioteci reprezintă în sine
o topică extinsă, fiind subiectul multor cărţi de specialitate, pe
lângă manualele de referinţă, manualele de programare,
manualele de dezvoltare etc. Prezentarea lor succintă într-un
singur capitol nu înlocuieşte necesitatea consultării unor astfel
de documentaţii atunci când se programează efectiv, ci are ca
scop formarea unor cunoştinţe generale despre problematica
programării aplicaţiilor de baze de date. În secţiunile care
urmează este abordată descrierea comparată a posibilităţilor de
programare oferite de diferite limbaje şi biblioteci şi este
urmărit modul în care acestea reflectă caracteristicile bazelor
de date relaţionale.

4.1. Limbaje procedurale de extensie a limbajului SQL


Un limbaj procedural (procedural languages), combină
instrucţiuni SQL cu instrucţiuni pentru controlul ordinii de
execuţie, asigurând extinderea posibilităţilor sistemelor de
gestiune a bazelor de date.

131
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

Limbajele procedurale permit definirea unor variabile


locale, instructiuni de control al ordinii de execuţie (bucle
while, instrucţiuni condiţionale if etc.), precum şi suport de
creare a cursoarelor, a procedurilor stocate, a funcţiilor
definite de utilizator şi a declanşatorilor (triggere).
Un cursor (cursor) este o structură care permit memorarea
(folosind un buffer în memorie) a unei mulţimi de linii
returnate ca rezultat, de o instrucţiune de interogare.
Programele de aplicaţii nu pot prelucra deodată toate liniile
rezultatului şi folosesc cursoare pentru extragerea individuală a
unei linii (sau a unui grup de linii) din mulţimea de linii
rezultat. În fiecare moment, într-un cursor există o poziţie
curentă (linie curentă) în mulţimea de linii rezultat. La fiecare
operaţie de extragere, se citesc una sau mai multe linii relativ la
poziţia curentă a cursorului, iar această poziţie se actualizează
conform modului de parcurgere (înainte sau înapoi). Cursoarele
permit salvarea, folosirea repetată sau derularea de mai multe
ori a liniilor pe care le conţin. De asemenea, cursoarele oferă
mai multe posibilităţi de control al accesului concurent a mai
multor utilizatori la tabelele unei baze de date.
În standardul SQL2 sunt prevăzute instrucţiunile principale
de definire şi de operare a cursoarelor: DECLARE CURSOR,
OPEN, FETCH şi CLOSE. Instrucţiunea de definire a unui
cursor SQL2 are sintaxa:
DECLARE nume_cursor [INSENSITIVE][SCROLL]
CURSOR
FOR instructiune_select [FOR {READ
ONLY|UPDATE [OF col1[,...n]]}];
O astfel de declaraţie creează cursorul cu numele
nume_cursor pentru mulţimea de linii rezultat returnată de
instrucţiunea instructiune_select şi setează atributele
de comportare (behavior attributes) ale cursorului: atributul de
senzitivitate şi atributul de actualizare.

132
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

Instrucţiunea OPEN nume_cursor, specificată în


standardul SQL2, permite deschiderea unui cursor (care a fost
declarat cu numele nume_cursor printr-o instrucţiune
DECLARE CURSOR); deschiderea cursorului înseamnă
popularea cursorului cu datele din tabelele la care se referă
instrucţiunea SELECT a cursorului. Instrucţiunea de extragere
a liniilor dintr-un cursor are sintaxa:
FETCH [FROM] nume_cursor INTO
lista_variabile;
şi defineşte operaţia de extragere a unei linii (din poziţia
curentă), din cursorul cu numele cursor_name în
variabilele din lista lista_variabile.
Instrucţiunea CLOSE nume_cursor, specificată în
standardul SQL2, permite închiderea unui cursor (care a fost
declarat cu numele nume_cursor printr-o instrucţiune
DECLARE CURSOR); închiderea cursorului înseamnă
eliberarea buferului de memorie ocupat de cursorul respectiv.
Cursoarele se pot crea atât la nivelul limbajului SQL2 sau
al extensiilor procedurale ale acestuia, cât şi prin intermediul
limbajului SQL integrat (Embedded SQL) sau a bibliotecilor şi
interfeţelor de programare a aplicaţiilor de baze de date (de
exemplu, ODBC, JDBC).
Cursoarele pot fi memorate în server, iar clientul primeşte
câte o linie (sau un grup de linii) de la server la fiecare
instrucţiune de extragere sau pot fi memorate în client şi sunt
folosite direct în programul respectiv.
Cursoarele create prin intermediul unui limbaj de extensie
SQL sunt cursoare la server şi pot fi definite în funcţiile şi
procedurile stocate din server. În interfeţele de programare se
pot defini atât cursoare la server cât şi cursoare la client. Aceste
aspecte vor fi detaliate pentru fiecare limbaj sau interfaţă în
parte. În general, se consideră că este mai avantajos să fie
folosite cursoare la server decât cursoare la client, deoarece
memorarea în client necesită ca întreaga mulţime de tupluri să

133
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

fie transferată dintr-o dată de la server la client, chiar dacă


ulterior, din diferite cauze, clientul nu va folosi decât o parte
din tuplurile pe care le-a primit prin reţea şi le-a memorat.
O procedură stocată (stored procedure) este o procedură
care implementează o parte din algoritmii de calcul ai
aplicaţiilor şi care este memorată în baza de date la fel ca şi
alte obiecte ale bazei de date.
Procedurile stocate sunt compilate şi optimizate de sistemul
de gestiune o singură dată, atunci când sunt folosite prima oară
şi rămân memorate în server pentru oricâte apeluri ulterioare.
Apelul unei proceduri stocate de către un client (aplicaţie),
produce execuţia tuturor instrucţiunilor procedurii şi returnarea
rezultatului (dacă există), eliminând cerinţa ca acel client să
transmită individual fiecare instrucţiune necesară pentru
rezolvarea sarcinii de calcul respective. În felul acesta se
reduce, pe de o parte, comunicaţia între aplicaţie şi serverul
bazei de date şi pe de altă parte, chiar timpul de execuţie a
sarcinii respective, dat fiind că procedura stocată este deja
compilată şi optimizată.
Există însă şi pericolul ca, dacă foarte multe aplicaţii îşi
desfăşoară operaţiile de prelucrare pe server prin intermediul
procedurilor stocate, serverul să fie congestionat şi să nu mai
asigure performanţe satisfăcătoare nici uneia din aplicaţii. Cu
alte cuvinte, utilizarea intensă a procedurilor stocate poate duce
la scăderea scalabilităţii sistemului de baze de date.
Bineînţeles, o analiză atentă a modului de distribuire a
operaţiilor de prelucrare între execuţia la serverul de baze de
date (în proceduri stocate) şi execuţia la client, în programele
de aplicaţii sau în alte niveluri intermediare de execuţie
distribuită (middleware) poate asigura atât perfomanţe ridicate
de execuţie cât şi scalabilitatea sistemelor de baze de date.
O funcţie definită de utilizator (user-defined function), este
o funcţie memorată în baza de date, la fel ca o procedură
stocată; diferenţa între acestea este că o funcţie returnează

134
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

întotdeauna o valoare şi poate fi folosită direct în expresii, pe


câtă vreme o procedură stocată poate să nu returneze nici o
valoare.
Un trigger este o procedură stocată cu o funcţionare
specială, care este executată automat atunci când se
efectuează o operaţie de actualizare a unei relaţii.
Triggerele sunt asociate cu comenzi de inserare
(INSERT), ştergere (DELETE) sau actualizare (UPDATE)
a tuplurilor dintr-o anumită relaţie şi au ca utilizare principală
extinderea capacităţii sistemului de gestiune de menţinere a
integrităţii datelor relaţionale.
Prin triggere se pot specifica şi impune procedural
constrângerile explicite, cum sunt dependenţele de date
(dependenţe funcţionale, multivalorice sau de joncţiune) care
nu sunt determinate de chei ale relaţiilor. De asemenea,
triggerele mai sunt folosite şi pentru generarea automată a unor
valori care rezultă din valori ale altor atribute, precum şi pentru
jurnalizarea transparentă a evenimentelor sau culegerea de date
statistice în legătură cu accesarea relaţiilor.
Standardul SQL2 nu prevede comenzi pentru crearea
triggerelor, dar ele pot fi create folosind instrucţiuni ale
limbajelor procedurale de extensie a limbajului SQL. În
general, triggerele definite în diferite limbaje procedurale sunt
neportabile.
Limbajele procedurale de extensie a limbajului SQL, deşi
au aceeaşi utilizare generală în programarea bazelor de date,
sunt specifice fiecărui SGBD şi nu sunt tocmai compatibile
între ele. În continuare se vor prezenta pe scurt caracteristicile
limbajelor Transact-SQL şi PL/SQL. Detalii privind aceste
limbaje se găsesc, în documentaţia sistemelor de gestiune care
le utilizează.

135
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

4.1.1. Limbajul Transact SQL


Programele Transact-SQL pot fi executate ca proceduri
memorate în cadrul bazei de date sau ca loturi (batchs) de
instrucţiuni transmise sistemului prin intermediul unei aplicaţii
sau a unui program utilitar de acces interactiv la baza de date.
Programele utilitare de acces interactiv din distribuţia SQL
Server sunt isql sau osql (la nivel de linie de comandă) şi SQL
Query Analyzer (care oferă şi o interfaţă grafică). De asemenea,
numeroase operaţii de definire a tabelelor şi a altor
caracteristici ale bazelor de date se pot face din consola de
administrare (Enterprise Manager) a sistemului SQL Server.
Loturi de prelucrare. Un lot (batch) constă dintr-o secvenţă de
instrucţiuni Transact-SQL terminată cu comanda GO. Există
mai multe reguli de grupare a instrucţiunilor în loturi. De
exemplu: orice instrucţiune CREATE trebuie să fie prima în
lot; de aceea nu pot fi grupate în acelaşi lot instrucţiunile
CREATE TABLE, CREATE VIEW, CREATE TRIGGER,
CREATE RULE; etc.
Sistemul de gestiune SQL Server compilează lotul de
instrucţiuni şi dacă este corect din punct de vedere sintactic,
începe execuţia lui; dacă există erori de compilare, lotul nu este
executat deloc. Erorile apărute în cursul execuţiei unui lot pot
opri numai execuţia instrucţiunii eronate (de exemplu, în cazul
erorilor de nerespectare a unor constrângeri) sau pot opri
execuţia instrucţiunii care a provocat eroarea şi a tuturor
instrucţiunilor care urmează după aceasta. În acest din urmă
caz vor fi efectuate şi operaţii legate de gestiunea tranzacţiilor,
dacă este cazul (rularea înapoi - rollback- a operaţiilor
efectuate înainte de apariţia erorii).
Variabile locale. În limbajul Transact-SQL pot fi folosite
variabile locale pentru memorarea unor valori care pot fi testate
sau modificate (ca în orice alt limbaj) şi în plus, asigură
transferul datelor către şi de la tabelele bazei de date.

136
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

Variabilele locale au ca domeniu de definiţie lotul, procedura


sau blocul în care au fost declarate.
O variabilă locală se declară folosind instrucţiunea
DECLARE care specifică un identificator (un nume care
trebuie să înceapă cu caracterul @) şi tipul variabilei. Sintaxa de
declarare arată astfel:
DECLARE @nume_variabila tip_date
Limbajul Transact-SQL suportă toate tipurile de date
prevăzute în standardul SQL2 şi în plus, permite definirea de
către utilizator a unor noi tipuri de date. Iniţializarea
variabilelor locale se poate face printr-o comandă SELECT, cu
următoarea sintaxă:
SELECT @nume_variabila = expresie
De exemplu, declararea variabilei locale cu numele
@contor, de tip întreg (int) şi iniţializarea acesteia cu
valoarea 1 se face astfel:
DECLARE @contor int
SELECT @contor = 1
Instrucţiuni de control al ordinii de execuţie. Ordinea de
execuţie a instrucţiunilor unui lot sau a unei proceduri stocate
este controlată prin următoarele instrucţiuni de control:

Instrucţiuni SQL. Limbajul Transact-SQL suportă toate


instrucţiunile SQL, cu unele modificări de sintaxă, astfel încât
să poată fi folosite în combinaţie cu variabilele locale ale
programului.
De exemplu, formă modificată a instrucţiunii SELECT, prin
care se asignează variabile locale cu valori ale unor atribute
selectate, este:
SELECT @var1 = col1, @var2 = col2, ...
@varn = coln
FROM lista_tabele WHERE conditie
137
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

O astfel de instrucţiune este utilă pentru interogările care


returnează o singură linie, deoarece variabilele locale sunt
setate cu valorile coloanelor primei linii a rezultatului, iar
valorile din celelalte linii se pierd (nemaifiind loc unde să poată
fi memorate).
DECLARE @id_angajat int, @nume char(20,
@prenume char(20)
SELECT @nume = Nume, @prenume = Prenume
FROM ANGAJATI WHERE IdSAngajat =
@id_angajat
Atunci când o interogare returnează o mulţime de linii se
poate folosi un cursor. De asemenea, variabilele locale pot fi
folosite în construcţia condiţiei din clauza WHERE a
instrucţiunii SELECT, în orice loc unde poate fi folosită o
variabilă de coloană sau o constantă.

4.2. Biblioteci de programare a aplicaţiilor de baze de


date
Deşi nu sunt prevăzute în standardul SQL, interfeţele de
programare a aplicaţiilor de baze de date s-au dezvoltat şi
diversificat deosebit de mult şi reprezintă în momentul de faţă
cea mai folosită tehnologie de realizare a acestor aplicaţii.
Multe sisteme de gestiune a bazelor de date prezintă biblioteci
de programare care oferă o interfaţă compusă din funcţii şi
macrodefiniţii ce permit unei aplicaţii să interacţioneze cu
serverul bazei de date. În general, funcţiile prevăzute în astfel
de interfeţe permit conectarea la server, transmiterea către
server a unor instrucţiuni SQL şi preluarea rezultatelor
returnate de server. Cele mai multe biblioteci sunt dezvoltate
pentru limbajul C (de exemplu, biblioteca C pentru sistemul
Microsoft SQL Server - DB-Library for C), dar există
biblioteci şi pentru alte limbaje (C++, Perl, PHP etc).
Pe lângă aceste biblioteci specifice diferitelor SGBD, s-au
dezvoltat şi bibiloteci care oferă interfeţe cu un grad ridicat de

138
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

generalitate, care pot fi folosite pentru mai multe tipuri de


SGBD. Cele mai cunoscute sunt interfeţele ODBC (Open
DataBase Connectivity) sau JDBC (Java DataBase
Connectivity), care vor fi prezentate în ultimele secţiuni ale
acestui capitol.

4.2.1. Interfaţa ODBC


Bibliotecile de programare a aplicaţiilor specifice fiecărui
SGBD prezintă dezavantajul dependenţei codului dezvoltat faţă
de sistemul folosit la un moment dat; dacă se schimbă SGBD,
atunci se schimbă întreaga interfaţă şi o mare parte din
programele de aplicaţii trebuie să fie rescrise.
Tehnologia ODBC (Open Database Connectivity) oferă o
interfaţă de programare a aplicaţiilor (Application
Programming Interface – API) prin apel de funcţii (call-level
interface - CLI), independentă de SGBD folosit. Această
independenţă se obţine prin intermediul unor drivere, care sunt
specifice fiecărui SGBD, în timp ce funcţiile prevăzute în
interfaţă, care pot fi apelate de aplicaţii, sunt aceleaşi, definite
de standardul ODBC (fig. 4.1).

Fig. 4.1. Arhitectura ODBC.

139
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

Pentru a folosi interfaţa ODBC, trebuie să fie instalat


driverul pentru SGBD necesar. Unele drivere ODBC se
instalează atunci când se instalează unele pachete de programe.
De exemplu, driverele ODBC pentru baze de date Access,
FoxPro se instaleză o dată cu pachetul Microsoft Office. Alte
drivere ODBC se pot instala separat, dacă există pachetul de
instalare respectiv. Administratorul de drivere încarcă driverul
specific sistemului de gestiune folosit de aplicaţie.
Administratorul de drivere, precum şi driverele specifice
diferitelor sisteme de gestiune de baze de date sunt, în general,
furnizate ca biblioteci dinamice care sunt legate (link) în
programul de aplicaţie.
Pentru orice tip de SGBD pentru care este instalat un driver
ODBC se poate defini o sursă de date folosind administratorul
de surse de date (ODBC Data Source Administrator) care
atribuie un nume de sursă de date (alte opţiuni, depinzând de
driverul instalat), unei baze de date.
Un program de aplicaţie care utilizează interfaţa ODBC
apelează funcţii ODBC care sunt implementate în driver.
Driverul transformă apelurile de funcţii ODBC în comenzi
SQL (sau într-un limbaj procedural de extensie a limbajului
SQL, implementat de sistemul de gestiune respectiv) pe care le
transmite sistemului de gestiune, preia rezultatele şi le
returnează programului de aplicaţie.
Această tehnologie, care oferă şi avantajul unui standard la
care au participat majoritatea producătorilor de sisteme de
gestiune a bazelor de date, a fost extrem de bine primită de
programatorii de aplicaţii de baze de date şi s-a dezvoltat foarte
rapid. Drivere ODBC sunt disponibile pentru majoritatea
sistemelor de gestiune a bazelor de date şi sunt produse de
furnizorii de SGBD sau de alte firme producătoare de software.
Interfaţa ODBC poate fi folosită direct în programarea
aplicaţiilor sau poate fi accesată prin intermediul altor interfeţe,
de nivel mai ridicat, care înglobează funcţiile ODBC, oferind

140
Cap.4 Biblioteci şi limbaje de programare a aplicaţiilor de baze de date

modalităţi de programare obiect-orientate: RDO (Remote Data


Objects), DAO (Data Access Objects), clase MFC (Microsoft
Foundation Class), pentru baze de date.

4.2.2. Interfaţa JDBC


Ca şi interfaţa ODBC, interfaţa JDBC (Java Database
Connectivity)este o interfaţă de programare a aplicaţiilor de
baze de date independentă de platformă şi de SGBD. Interfaţa
JDBC constă din clase în limbajul Java şi permite interacţiunea
cu baze de date relaţionale, precum şi cu alte surse de date în
format tabelar.
Prima versiune a specificaţiilor JDBC 1.0 API este
conţinută în biblioteca java.sql (care face parte din
sistemul de dezvoltare standard Java - J2SDK). Noi
funcţionalităţi au fost adăugate în specificaţiile JDBC 2.0 API,
şi JDBC 2.1 API, dintre care o parte sunt conţinute în
versiunile recente ale bibliotecii java.sql, iar altă parte în
biblioteca de extensie javax.sql.
Ca şi interfaţa ODBC, interfaţa JDBC este o interfaţă la
nivel de apeluri de funcţii (call-level interface - CLI)
independentă de sistemul de gestiune, prin care programele de
aplicaţie Java transmit către baza de date instrucţiuni SQL ca
şiruri de caractere. Interfaţa JDBC, care s-a dezvoltat pe baza
interfeţei ODBC, permite accesul direct la bazele de date
relaţionale din programe Java, din care apelul funcţiilor ODBC
este destul de dificil şi produce scăderea nivelului de securitate
oferit de tehnologia Java.

141

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