A JDBC elmélet – I. rész

A Java nyelv hálózati lehetőségei miatt ideálisan megfelel kliens-szerver architektúrájú adatbázis-kezelő programok létrehozására; a java programok kommunikálni tudnak a legkülönfélébb adatbázisokkal is, tehát segítségével megoldható az adatbázis-hozzáférés.  Ezen kommunikáció lehetőségét a JDBC – Java DataBase Connectivity – biztosítja. A JDBC egy programozói interfész (API) SQL – Structured Querry Language -  utasítások végrehajtására.

A JDBC két részből áll:

·                     JDBC alap (Core) API: az adatbázis eléréséhez szükséges alapvető típusokat írja le. Ezeket a java.sql standard Java csomag tartalmazza.

·                     JDBC standard kiterjesztés (Extension) API: további haladó szintű JDBC típusokat ír le. Ezeket a javax.sql csomag tartalmazza.

A JDBC API szolgáltatásait három csoportba lehet sorolni:

·                     összekapcsolódás relációs adatbázissal

·                     SQL utasítások végrehajtása

·                     SQL lekérdezések eredményeinek feldolgozása

A JDBC használatával a Java adatbázis-kezelő programjaink nemcsak platform függetlenekké hanem még adatbázis-kezelőktől függetlenekké is válnak.

Két- és háromrétegű adatbázis-elérési modell

A JDBC kétféle adatbázis-elérési modellt támogat: a kétrétegű- valamint a háromrétegű modellt.

1)      A kétrétegű modell: a program közvetlenül az adatbázis-kezelő rendszerrel kommunikál. Maga az adatbázis akár másik gépen is elhelyezkedhet, mint ahol a program fut, az adatforgalom pedig hálózaton keresztül folyik. Ezt az esetet nevezik kliens-szerver konfigurációnak, ahol az adatbázist tároló gép a szerver, a programot futtató gép pedig a kliens.

2)      A háromrétegű modell: a program adott protokollon keresztül egy "középső" szolgáltató réteggel kommunikál. Ez a réteg a programtól kapott parancsokat értelmezi és átalakítja, majd továbbítja azokat az adatbázis-kezelő rendszerhez. A lekérdezési eredményeket a program szintén a szolgáltató rétegen keresztül kapja meg. A középső réteg bevezetése lehetővé teszi az adatbázis hozzáférések könnyű ellenőrzését és optimalizálását is. A szolgáltató réteg Java implementációja esetén az adatbázissal JDBC-n keresztül történik a kommunikáció.

JDBC meghajtó-programok

A JDBC hívások végrehajtásakor mindig fizikailag is fel kell venni a kapcsolatot a használt adatbázissal. Mivel ezen adatbázis akármilyen típusú (azaz az adatbázis-kezelő bármilyen szoftver) lehet, ezért minden adatbázis-kezelő esetén külön biztosítani kell a JDBC hívások megfelelő értelmezését és kiszolgálását. Ezt a feladatot JDBC programok végzik el.

Egy JDBC meghajtó-program valósítja meg a JDBC hívásokat egy adott adatbázistípushoz a DRIVER interfészt implementálva. A meghajtó-programok az alábbi négy csoportba sorolhatóak be:

·                     JDBC-ODBC áthidaló program + ODBC meghajtó-program

·                     JDBC – saját API áthidaló – meghajtó-program

·                     JDBC – hálózati protokoll Java meghajtó-program

·                     JDBC – saját protokoll Java meghajtó-program

Ezek közül platform- és adatbáziskezelő-független a JDBC – hálózati protokoll Java meghajtó-program és a három rétegű adatbázis-kezelési modell, ahol a kiszolgáló réteg adatbázis-kapcsolatát a kétszintű adatbázis-elérési modellnek megfelelő meghajtó-programokkal lehet megvalósítani.

JDBC használata

Amint azt már említettem, a JDBC API típusait a java.sql és a javax.sql csomagok tartalmazzák, melyek már a JAVA 2 részei, ezért a JDK 1.2-es változata már tartalmazza őket. Korábbi verziók esetén külön kellett ezen csomagokat installálni.

A JDBC egyik legkecsegtetőbb felhasználói területe a böngészőprogramokkal történő adatlekérdezés és módosítás appletek/szervletek segítségével. Szervletek esetén csak maga a szervlet használja a JDBC-t adatbázis-elérésre a szerveroldalon, a böngészőprogram dinamikusan generált HTML oldalak, illetve HTML űrlapok formájában olvashatja, illetve módosíthatja az adatokat. Appletek használatakor a felhasználó közvetlenül hozzáférhet az adatbázishoz JDBC-n keresztül. Ennek egyetlen feltétele, hogy a kliens-oldalról elérhető legyen a használt adatbázis meghajtó-program kódja. Mivel egy hálózati applet alapértelmezés szerint csak a kódját tartalmazó géppel hozhat létre hálózati kapcsolatot, ezért csak olyan adatbázissal kommunikálhat, amely ugyanazon a szerveren fut, mint ahonnan az applet kódja is letöltésre került. Többrétegű elérési modell esetén csak a kiszolgáló rétegnek kell ugyanazon a gépen lennie, mint az applet kódjának, maga az adatbázis akár más gépen is lehet, az applet mégis képes lesz azt – a kiszolgáló rétegen – elérni.

JDBC – architektúra

Egy applikációban használt osztályok és interfészek, amelyeket a JDBC használ megtalálhatóak a következő ábrán:

Egy JDBC alkalmazás egy vagy több drivert is használhat a java.sql csomagból a DriverManager osztály segítségével. A driverek adatbázis specifikusak, tehát minden adatbázis más meghajtót használ. Épp ezért ugyanazon az applikáción belül dolgozhatunk különböző adatbázisokkal, tehát több driverrel is. Szükségünk lehet egy olyan driverre, amely egy távoli gépen található Oracle adatbázissal kommunikál és egy másik driverre, amely a lokális ODBC kapcsolatot képviseli és egy SQL szerverrel kommunikál. Egy applikációban az adatbázissal való kommunikálás a következő lépéseket követeli meg:

A DriverManager-től egy adatbázis-specifikus drivert kérünk

A specifikus driver létrehozza a kapcsolatot az adatbázissal és egy Connection típusú objektumot ad vissza

A Connection típusú objektum segítségével létrehozunk egy Statement objektumot, amely egy SQL kérést is tartalmaz az adatbázis felé

A Statement objektum az eredményeket egy ResultSet objektumban adja vissza

Driverek és drivermanager

Meghajtó-program kezelése

Amint azt a fentiekben is láthattuk egy JDBC meghajtó-program valósítja meg a JDBC hívásokat egy adott adatbázistípuson, ennek segítségével jön létre a fizikai kommunikáció a program és a megfelelő adatbázis között. Egy meghajtó-programnak a Driver interfészt kell implementálnia.

Meghajtó-program kiválasztása

A felhasználni kívánt meghajtó-program kiválasztása történhet a szükséges meghajtó-program közvetlen megnevezésével vagy automatikusan a DriverManager osztály segítségével. Ez az osztály a megfelelő meghajtó-program kiválasztását és használatát segíti. Nyilvántartja a pillanatnyilag használható összes regisztrált meghajtó-programot, és az adatbázis-kapcsolat kérésekor a kívánt típusú adatbázist kezelő meghajtó-programot fogja aktiválni. Ugyanakkor a meghajtó-programok kapcsolattartási idejét is ellenőriztetni lehet vele, és a hibaüzenetek nyomon követéséért is ő a felelős.

Meghajtó-programok regisztrálása

A DriverManager osztály kezeli a regisztrált meghajtó-programok listáját. Egy meghajtó-program rendszerint a betöltése után automatikusan, statikus inicializátor segítségével regisztráltatja magát, a DriverManager osztály registerDriver metódusával, ezért a felhasználónak csak a megfelelő meghajtó-program betöltéséről kell gondoskodnia. A betöltést két módszerrel lehet megvalósítani:

·   a meghajtó-program osztályának direkt betöltése a Class.forName statikus metódussal, amely a paraméterként kapott nevű osztály dinamikus betöltését végzi el

Pl:

Class.forName (”com.sybase.jdbc.SysDriver”)

Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”)

·   a jdbc.drivers rendszerparaméter beállításával. Ezen rendszerparaméter a meghajtó-programok neveinek kettősponttal elválasztott listáját tartalmazza. A DriverManager osztály inicializálásakor automatikusan betölti ezen rendszerparaméterben felsorolt meghajtó-programokat.

E két módszer közül az elsőnek a használata javasolt, mivelhogy az appletek nem állíthatnak be rendszerparamétereket, és a DriverManager csak egyszer, az inicializáláskor veszi figyelembe a jdbc.drivers értékét.

Finta Anna - Mária