• Nem Talált Eredményt

A JDBC API főbb elemei

In document Programozási technológiák – Jegyzet (Pldal 141-144)

A szerződés alapú tervezés alapelvei

A szerződés

2. Adatbázis-kapcsolatok kezelése

2.3. A JDBC API főbb elemei

Ebben a szakaszban a JDBC API főbb interfészeinek és osztályainak a rövid bemutatása történik meg.

6.12. ábra - A fő JDBC osztályok és interfészek és üzeneteik

Adatkezelés

DriverManager: Ez az osztály adatbázis-meghajtók kezelésére szolgál. A DriverManager egy Java alkalmazásból egy úgynevezett JDBC URL segítségével érkező kérésre az alprotokollon keresztül választja ki a megfelelő meghajtót a kapcsolat létrehozásához. Az adatbázis-kapcsolat az első olyan meghajtó segítségével jön létre, amely úgy nyilatkozik, hogy felismeri a jdbc protokoll alatt lévő alprotokollt.

Megjegyzés

Egy JDBC URL általános szerkezete a következő:

<protokoll>:<alprotokoll>:<alnév>

A protokoll értéke a JDBC-specifikáció szerint mindigjdbc.Az alprotokoll segítségével a meghajtó, illetve a kapcsolódási mechanizmus azonosítható, míg az alnév azon információkat tartalmazza, amelyek az adatbázis-hozzáférés kiépítéséhez szükségesek (gépnév, annak a portnak a száma, amelyen a kapcsolódásfigyelő várakozik a kapcsolatokra, stb.). Általában azt mondhatjuk, hogy az alprotokoll a DriverManager-nek szól, hogy ez alapján válassza ki a meghajtóprogramot, míg az alnév már a kiválasztott Driver-nek szól, hogy megtudja, milyen paraméterekkel építhati ki a kapcsolatot. Az alnév felépítése gyártófüggő.

Példa néhány JDBC URL-re:

• Oracle Database:

jdbc:oracle:thin:@servername.inf.unideb.hu:1521:ORCL

Itt az oracle:thin rész az alprotokoll, ez azonosítja, hogy az Oracle gyártó úgynevezett vékony (thin) meghajtóprogramjára van szükség, amely az Oracle 4-es típusú JDBC-meghajtóprogramja. Az URL további része a szükséges kapcsolódási adatokat – szervernév, port és példányazonosító (SID) –tartalmazza (a felhasználói név és a jelszó nélkül, habár az is belekódolható az URL-be, például a scott nevű, tiger jelszavú felhasználó esetén:

jdbc:oracle:thin:scott/tiger@servername.inf.unideb.hu:1521:ORCL).

jdbc:oracle:oci8:@TEST

Adatkezelés

Ebben az esetben az alprotokoll az oracle:oci8, amely az Oracle 2-es típusú JDBC-driverét azonosítja. Ennek használatához az Oracle Client szoftver kliensoldali telepítésére is szükség van, és ekkor a kapcsolódási információként az alnévben megadott TEST azonosító a vastag kliens tnsnames.ora állományának egyik bejegyzését azonosítja (ez a bejegyzés részletezi a kapcsolódási adatokat).

• MySQL: jdbc:mysql://servername.inf.unideb.hu:3306/dbname

Az alprotokoll a mysql, az alnév pedig a szervernevet, a portot és annak az adatbázisnak a nevét tartalmazza, amelyhez kapcsolódni szeretnénk.

• PostgreSQL: jdbc:postgresql://servername.inf.unideb.hu:5432/dbname

Ugyanaz, mint a MySQL esetén, leszámítva, hogy az alprotokoll neve mysql helyett postgresql.

• IBM DB2:

jdbc:db2://servername.inf.unideb.hu:50000/SAMPLE A DB2 4-es típusú drivere esetén.

jdbc:db2:sample

A DB2 2-es típusú drivere esetén.

• MS SQL Server:

jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurit y=true;

Az alprotokoll az sqlserver névre hallgat.

• SQLite: jdbc:sqlite:///COMPUTERNAME/shareA/dirB/dbfile

Driver: Ez az interfész az adatbázisszerverrel történő kommunikáció kezeléséért felelős. Általában nem közvetlenül használjuk az implementáló osztályokat: ez a felelősség a fent említett DriverManager osztályé.

Connection: Ez az interfész az adatbázissal kiépített kapcsolatot reprezentálja; egy kommunikációs környezetet biztosít.

Statement, PreparedStatement, CallableStatement: Olyan interfészek, amelyek egy-egy végrehajtandó SQL-utasítás absztrakciói (utasításobjektumok). A felírás sorrendjében szülő-gyermek viszonyban állnak egymással. A PreparedStatement interfész segítségével paraméterezhető SQL-utasítások létrehozását, míg a CallableStatement segítségével adatbázisban tárolt alprogramok hívását (amelyeknek természetesen paraméterek is átadhatók) végezhetjük.

ResultSet: Ez az interfész tartalmazza az utasításobjektumok segítségével végrehajtott lekérdezés eredményrelációját (vagyis a lekérdezés eredményhalmazának absztrakciójáról van szó), amelynek tetszőleges számú sora (nulla, egy vagy több) lehet, attól függően, hogy a lekérdezés feltételeinek hány rekord felelt meg. A ResultSet objektum iterátorként viselkedik az eredményhalmaz sorainak bejárásakor. Egy időben csak egy sort dolgozhatunk fel, amelyre egy kurzor mutat. A kurzor egy olyan mutató, amely az aktuális sort azonosítja. Közvetlenül a lekérdezés végrehajtását követően a létrejövő kurzor az első sor elé mutat, függetlenül a eredményreláció számosságától. Az eredményhalmazt az elejétől a végéig bejárhatjuk a kurzor segítségével, vagyis az API metódust biztosít a kurzor léptetésére.

Egy eredményhalmaz alaphelyzetben egyszer, egyirányban, szekvenciális módon járható be, azonban már a JDBC 2 óta van mód ennek az alapértelmezésnek a felülírására, vagyis lehetőség van egy eredményhalmaz nem csak az elejétől a vége felé járhatunk be, hanem fordítva is, a végéről az eleje felé haladva, illetve tetszőlegesen is pozícionálhatunk az ereményhalmaz rekordjai között.

SQLException: Az adatbázis-műveletek végrehajtása során bekövetkező hibákat reprezentáló kivételosztály.

Implementálja az Iterable interfészt, amely lehetővé teszi, hogy az adatbázis oldalon létrejövő kivételek

Adatkezelés

DatabaseMetaData: Az adatbázis-kezelő rendszerek nemcsak a felhasználók adatait tárolják, de többek között információt nyújtanak az adatok szerkezetéről, tárolási és hozzáférési módjáról is. Ez utóbbi adatok nevezzük metaadatoknak (adatokról szóló adatok). A metaadatbázisban (vagy katalógusban) tárolt információk, azok szervezési és kinyerési módja adatbázis-kezelőről adatbázis-kezelőre változhat. Éppen ezért a JDBC biztosítja a DatabaseMetaData interfészt, amelyet a meghajtó írójának (vagyis az adatbázis-kezelő gyártójának) kötelezően implementálnia kell, így szabványos módon férhetünk hozzá az adatbázis metaadataihoz.

ResultSetMetaData: Nem minden esetben ismerjük a program írásakor, hogy az egyes SELECT-utasítások által visszaadott eredményhalmazok milyen szerkezetűek (gondoljunk különösen a SELECT * FROM táblanév alakú lekérdezésekre, amely eredményhalmazának a szerkezete az oszlopok létrehozását illetve törlését végző DDL-utasítások hatására is megváltozhat). A ResultSetMetaData interfész segítségével a lekérdezés eredményének többek között olyan metaadataihoz férhetünk hozzá, mint amilyen az eredményhalmaz oszlopainak száma és az egyes oszlopok neve és típusa.

A leggyakoribb műveletek a JDBC API használatakor természetesen DML utasítások, vagyis a SELECT, az INSERT, a DELETE, és az UPDATE, de lehetőség van DDL-utasítások (például CREATE TABLE, DROP TABLE és ALTER TABLE) végrehajtására is. A főbb típusokat (az SQLException kivételével, amelyet tulajdonképpen bármelyik típus metódusai kiválthatnak) a közöttük lévő viszonyokkal az alábbi osztálydiagram szemlélteti:

6.13. ábra - A java.sql csomag főbb típusai a közöttük lévő kapcsolatokkal

In document Programozási technológiák – Jegyzet (Pldal 141-144)