Cuvântul de ordine al zilelor noastre în informatica este, fara îndoiala, "Java". Despre baze de date s-a scris mult si se vor mai scrie înca multe. Atât Java, cât si bazele de date sunt domenii importante ale informaticii. În acest articol încercam sa aratam cum am putea sa combinam Java si bazele de date.
JDBC (Java DataBase Connectivity) este o interfata standard SQL de acces la baze de date. Acesta ne furnizeaza un acces uniform la baze de date relationale. JDBC este constituit dintr-un set de clase si interfete scrise în Java, furnizând un API standard pentru proiectantii de aplicatii baze de date. Acest lucru face posibila scrierea aplicatiilor de baze de date folosind un API Java pur.
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. Bineînteles, scriind codul sursa în Java, ne este asigurata portabilitatea programului. Deci, iata doua motive puternice care fac combinatia Java - JDBC demna de luat în seama. Scrii un program o data si acesta ruleaza peste tot.
Fiind robust, sigur, usor de folosit, usor de înteles, Java este un excelent limbaj pentru a dezvolta aplicatii de baze de date. Tot ceea ce-i lipseste este modalitatea prin care aplicatiile Java pot comunica cu bazele de date. Aici vine însa JDBC-ul care ofera acest mecanism.
Ce face JDBC-ul? În linii mari JDBC face trei lucruri:
JDBC-ul este o interfata "low-level", adica este folosit pentru a executa direct comenzi SQL. El lucreaza foarte bine în aceasta postura si este mai usor de folosit decât alte API-uri pentru conexiunea bazelor de date, dar totodata a fost proiectat astfel încât sa fie baza pe care sa poti construi interfete si unelte de nivel mai ridicat. Pâna la ora actuala exista doua tipuri mai importante de API-uri JDBC:
În acest moment, ODBC-ul Microsoft-ului este probabil cea mai folosita interfata pentru a accesa baze de date relationale, oferind posibilitatea de a utiliza aproape orice fel de baza de date, de pe aproape orice platforma. Întrebarea care apare imediat: de ce nu utilizam pur si simplu ODBC din Javat Raspunsul este ca se poate folosi ODBC în Java, dar cel mai bine este sa utilizam JDBC sub forma combinatiei JDBC-ODBC, care va fi implementata în scurt timp. O alta întrebare apare: de ce avem nevoie de JDBC? Iata câteva raspunsuri:
Deci JDBC-ul este o interfata Java naturala catre facilitatile de baza din SQL. Însa JDBC-ul se bazeaza pe ODBC, astfel ca programatorii familiarizati cu ODBC vor gasi învatarea JDBC-ului foarte usoara.
În modelul cu doua niveluri (two-tier), un aplet sau o aplicatie Java lucreaza direct cu baza de date. În acest caz este necesar un driver JDBC care comunica cu SGBD-ul particular al bazei respective. Cererea SQL este trimisa bazei de date iar rezultatul este înapoiat utilizatorului, baza de date putându-se afla pe alta masina la care utilizatorul este conectat printr-o retea. Acest model este similar modelului client/server (vezi figura Modelul cu doua niveluri).
În modelul cu trei niveluri (three-tier), interogarile se trimit catre un nivel intermediar (numit si server de aplicatie), care retrimite cererea SQL catre serverul bazei de date. Acesta o prelucreaza si trimite rezultatul catre nivelul de mijloc, care îl transmite mai departe catre utilizator. În acest caz, utilizatorul poate utiliza un API de nivel înalt, mai simplu de folosit, care transpune cererile într-un nivel mai jos, înteles de serverul bazei de date (vezi figura Modelul cu trei niveluri).
Pâna acum nivelul de mijloc era scris în general în C sau C++, limbaje care ofera performante ridicate. Oricum, cu compilatoarele care traduc codul Java în cod specific masinii, a devenit practic sa se implementeze modelul cu trei nivele în Java. Acesta este un atu important, deoarece profita de calitatile Java în ceea ce priveste robustetea si securitatea.
SQL-ul este un limbaj standard pentru accesarea bazelor de date relationale. Aproape toate SGBD-urile folosesc pentru functionalitatea de baza o forma de SQL, însa exista diferente de la un SGBD la altul în ceea ce priveste alinierea dialectului SQL specific la standardul limbajului, mai ales pentru facilitatile mai avansate. Pâna ce aceste probleme se vor rezolva, API-ul JDBC trebuie sa suporte SQL-ul asa cum este.
Sa vedem însa cum se descurca JDBC-ul cu aceasta problema a concordantei SQL.
O modalitate pe care API-ul JDBC ne-o ofera este ca ne permite sa trimitem orice secventa SQL unui anumit SGBD. Prin aceasta suntem liberi sa folosim la maxim posibilitatile SQL-ului, dar exista riscul ca SGBD-ul sa nu înteleaga sintaxa si sa returneze eroare.
O a doua posibilitate pe care JDBC-ul o ofera este de a folosi asa-numitele "clauze escape", în stilul clauzelor escape ODBC. Aceasta metoda rezolva o parte din divergentele datorate implementarii SQL-ului.
A treia posibilitate este recomandata pentru aplicatii complexe. JDBC-ul furnizeaza informatii despre SGBD prin interfata DatabaseMetaData, astfel încât aplicatiile se pot adapta în functie de necesitatile si posibilitatile fiecarui SGBD.
Sa vedem acum câteva produse JDBC. JavaSoft furnizeaza JDBC-ul cu trei componente, toate incluse în JDK:
JDBC driver manager este coloana vertebrala a arhitecturii JDBC. Este destul de mic si simplu; functia de baza este de a conecta aplicatia Java cu driverul JDBC potrivit. JDBC driver test ne încredinteaza ca driverul JDBC va rula programul nostru. În fine, combinatia JDBC-ODBC permite driverelor ODBC sa fie folosite ca drivere JDBC.
În exemplul din caseta alaturata este prezentat un program Java care realizeaza o conexiune la un driver JDBC, caruia i se furnizeaza o secventa select si se afiseaza rezultatul (în acest caz, toate articolele tabelei).
Pito Peter si Stelian Vultur sunt studenti la Universitatea Petru Maior din Târgu-Mures si pot fi contactati la adresele .