JDBC



Primă facilitate de integrare a bazelor de date cu Java EE a aparut într-o specificaţie numită Java database Conectivity (JDBC) Aplicaţion Programming Interface (API). Aceasta a fost creată cu ajutorul facilităţilor oferite de DBMS şi cu ajutorul instrumentelor pentru dezvoltarea bazelor de date oferite de majoritatea celor care vindeau programe orientate catre manipulareă acestor baze de date, fie că erau baze de date distribuite fie că era vorba de baze de date relaţionale. Facilitatea oferită de Java EE vine să umple golul lasat de faptul că nu s-au incercat foarte multe variante de realizare a conenctivităţii bazelor de date cu alte soft-uri, atât din punct de vedere al limbajului propriu-zis (ca şi cod) cât şi din punct de vedere a interfeţei utilizator.
Un program Java care utilizează JDBC este structurat pe două straturi:
Primul strat este orientat spre aplicaţia Java şi se numeşte Driver manager în esenţă un obiect ce face referire la aspecte legate direct de aplicaţie;
Al doilea strat este orientat spre SGBD şi necesită drivere specifice bazelor de date la care aplicaţia strebuie să aibă acces. JDBC permite aplicaţiilor Java să acceseze mai multe tipuri de baze de date:
















JDBC crează o interfaţă pe diferite nivele prin care se realizează comunicarea cu bazele de date într-un mod uniform, similar ca şi concept cu componenetele oferite de catre Microsoft's Open Database Conectivity (ODBC), care au devenit standarde pentru calculatoarele personale şi Lan-uri. Standardul JDBC se bazează pe X/Open SQL Call Level Interface, care stă şi la bază standardului pentru ODBC, unul dintre motivele pentru care JDBC s-a dezvoltat atat de repede.
Clasele obiect care fac posibilă deschiderea acestor tranzacţii cu bazele de date sunt scrise în totalitate cu Java pentru a permite interacţiune mai mare decat una obţinută în cazul în care se scriau în limbajul C, urmând că apoi să fie folosite că funcţii apelate din Java, lucru care ar fi trebuit să fie facut în cazul ODBC. în acest fel se poate menţine securitatea, robustetea şi portabilitateă care fac din Java EE un mediu de programare asă de incitant. Oricum pentru a se promovă şi pentru a se mentine compatibilitatea, JDBC poate fi implementant peste ODBC şi alte interfeţe SQL.
JDBC este format din două părţi principale: JDBC API care oferă posibilitatea de a se realiza managmentul comunicatiei pentru JDBC, şi implementări pentru JDBC Manager-to-Driver, manager care realizează controlul comunicarii cu multiple drivere de diferite tipuri prin implementarea unei interfeţe directe intre driverele de interfaţă oferite de Java EE şi cele oferite de ODBC.
In pachetul java.sql apar şi o serie de clase şi interfeţe ce permit accesul şi manipularea bazelor de date, grupate în 8 interfeţe, (figura 8.2.) constând din:
 java.sql.Environment - permite crearea unei noi conexiuni pentru o bază de date;
 java.sql.Connection - specifică structură datelor pentru conexiune;
 java.sql.Statement - clasă container pentru comenzi SQL ;
 java.sql.ResultSet - asigură controlul accesului la rezultatele comenzilor.
 java.sql.ResultSetMetaData- se utilizează pentru a afla informaţii despre tipurile sau proprietăţile coloanelor din ResultSet;
 java.sql.CallableStatement - permite executarea procedurilor stocate în baza de date;
 java.sql.DatabaseMetaData - permite returnarea informaţiilor din baza de date, număruld e tabele ce compun baza de date, structura tabelelor din baza de date,nuărul de câmpun ce compun o tabelă,etc.;
 java.sql.Driver - cadrul JDBC penztru conexiuni multiple. Orice diver oferă o clasă ce implementează această interfaţă. Când o aplicaţie facecererea de conectare la o bază de date, clasa DriverManager interoghează fiecare driver dacă poate sau nu să realizeze conexiunea cu sursa de date. Interogarea este posibilă doar dacă acest driver poate implementa metode din interfaţa Driver;
 java.sql.PreparedStatement - asigură stocarea comenzilor SQL într-un obiect de tip PreparedStatement, care poate fi utilizat ulterior pentru executarea respectivului enunţ, oferind o eficienţă crescută aplicaţiilor.

















Diverul pentru JDBC API este continut în java.sql.Driver. Fiecare driver trebuie să ofere implementările clasei la toate clasele virtuale: java.sql.Connection, java.sql.Statement, java.sql.PreparedStatement, java.sql.CallableStatement, şi java.sql.ResultSet. Clasele virtuale descriu API dar sunt specifice modului în care lucrează fiecare bază de date. Puntea dintre JDBC- ODBC permite traduceri ale apelurilor JDBC în apeluri care pot fi întelese de către clientul ODBC la nivelul limbajul C. Rolul punţii este de a izola apelurile tipice pentru C catre o zonă controlată menţinându-se în acelaşi timp compatibilitatea cu baze de date non-JDBC.
Tipuri de date permise în JDBC sunt în strânsă corespondenţă cu tipurile SQL, astfel:

Tip SQL - Java Type Description
CHAR - StringSingle Character
VARCHAR - StringVariable length string of characters
LONGVARCHAR - java.io.InputStream Very long (multi-megabyte) strings
NUMERIC - java.sql.Numeric Absolute precision fixed-point values
DECIMAL - java.sql.Numeric Absolute precision Decimal value
BIT - Boolean Single bit/binary value (on or off)
TINYINT - byte 8-bit integer
SMALLINT- short 16-bit integer
INTEGER -int signed 32-bit integer
BIGINT - long signed 64-bit integer
REAL - float Floating-point value
FLOAT - float Floating-point value
DOUBLE - double Large floating-point value
BINARY - byte[] Array of binary values
VARBINARY - byte[] Variable length array of binary values
LONGVARBINARY - java.io.InputStream Very large (multi-megabyte) array of binary values
DATE - java.sql.Date Date value
TIME - java.sql.Time Time value (GMT)
TIMESTAMP - java.sql.Timestamp Time value with additional nanosecond field To sum up

JDBC urmăreşte o specificaţie stabilită şi implementarea pentru comunicaţiile neutre de la aplicaţii. Solutia cu punţi pentru sistemele curente ODBC permite utilizatorilor să menţină compatibilitatea cu sistemele mai vechi, către s-ar putea să nu aibă corespondent JDBC. Furnizorii de top lucrează pentru a realiza componente JDBC pentru bazele lor de date chiar dacă JDBC este încă în fază de germinare. Orice rezultate ale acestei munci vor putea fi văzute doar când furnizorii vor fi pregătiţi, ceea ce reprezintă o împiedicare implicită a procesului There de dezvoltare a mediului Java. Competiţia declanşată de Microsoft prin ActiveX (cunoscute şi că OLE Control Extensions), Visual Basic şi .NET exprimă presiunea Microsoft pentru realizareă unei lumii a apleturilor portabilă şi on line. Problema cu independenţă de platformă este clară şi evidentă în această soluţie. Componente cum ar fi JDBC pot fi printre factorii de decizie care să facă deciziile pentru firmele de software care se confruntă cu asemeneă probleme.