Documente Academic
Documente Profesional
Documente Cultură
Tipuri de drivere:
Nivel 1: Jdbc-Odbc – utilizează puntea Jdbc-Odbc prin mecanismul
ODBC de conectare la o bază de date
Nivel 2: nativ Java API – combină cod nativ cu cod Java pentru
convertirea cererilor JDBC în comenzi proprietar BD
Nivel 3: Database Midleware – drivere pure Java care folosesc un
server middleware pentru conversia cererilor JDBC in comenzi
DBMS. Serverul lucrează cu diverse tipuri de baze de date. Nu mai
există cod nativ pe partea de client
Nivel 4: Pure Java Driver – conectare directă la BD prin cod Java
utilizând un protocol specific bazei de date
Aplicatie Java Aplicatie Java Aplicatie Java Aplicatie Java
Cod nativ
DBMS
DBMS
Accesarea unei baze de date utilizând JDBC
Testarea cursorului:
int getHoldability() throws SQLException; // rezultatul este unul din cei
doi parametrii
Gruparea comenzilor - Tranzacții
Niveluri de izolare:
static final int TRANSACTION_NONE; // nu sunt permise tranzacțiile
static final int TRANSACTION_READ_UNCOMMITTED; // fără izolare
static final int TRANSACTION_READ_COMMITTED; // Este legat de
paradigma citirilor improprii - Dirty Reads. Nivelul trebuie sa înlăture
aceste situații. Soluție: nu sunt citite date care au fost modificate si nu s-au
definitivat modificările prin commit()
static final int TRANSACTION_REPEATABLE_READ; // Este legat
de paradigma “citirilor nerepetabile” - Non-Repeatable Reads.
Comenzi identice de citire dau rezultate diferite in cadrul aceleiași
tranzacții. Soluție: interzice unei tranzacții sa citească din nou date
dintr-un rând care a fost modificat definitiv prin commit() de către o
alta tranzacție.
static final int TRANSACTION_SERIALIZABLE; // Elimina si
riscurile create de problema “fantomei” -Phantom Reads. Problema
fantomei apare când o tranzacție inserează/șterge înregistrări
selectabile într-o selecție a altei tranzacții. Soluție: izolarea completa
- tranzacțiile sunt serializate.
Comenzi precompilate
Într-o aplicație JDBC se lucrează cu trei tipuri de date: tipurile Java, tipurile
JDBC, tipurile SQL (in dialectul corespunzător).
Tipurile JDBC sunt descrise in clasa java.sql.Types sub forma de câmpuri
statice int - BOOLEAN, DATE, DOUBLE etc.
Corespondenta dintre tipuri se face voluntar prin codul aplicației cunoscând
semnificația tipurilor.
Prin metoda de instanță a clasei ResultSetMetaData:
int getColumnType(int column) throws SQLException;
se poate obtine un tip din Types corespunzator coloanei investigate.
Tipul data:
public class java.sql.Date extends java.util.Date; // clasa destinata sa modeleze
data calendaristica in aplicațiile JDBC
public static Date valueOf(String s); // convertește un String de forma "yyyy-[M]M-
[d]d" in data JDBC
public String toString(); // convertește o data într-un sir in format "yyyy-[M]M-[d]d"
Opretatiuni CRUD (Create Read Update Delete) pe ResultSet
Inserare de noi rânduri
Trecerea pe rândul de insert
r.moveToInsertRow();
Operațiuni de inițializare câmpuri
r.updateTip(nrColoana, valoare);
…
Adăugarea rândului
r.insertRow();
Actualizare
r.absolute(i); // trecere pe rândul i
r.updateTip(nrColoana, valoare); // actualizare pe coloana nrColoana
…
r.updateRow(); // inserarea noilor valori
Ștergere
r.absolute(i); // trecere pe rândul dorit
r.deleteRow(); // ștergere
Accesul la metadate
Accesul la metadate prin Connection - sunt furnizate informații despre baza de
date (structura, tabele/viziuni, catalog etc.)
String getCatalog() throws SQLException
void setCatalog(String catalog) throws SQLException
DatabaseMetaData getMetaData() throws SQLException