A Java programozási nyelv Soós Sándor 1/20
Java programozási nyelv11. rész – Adatbázis-programozás
Nyugat-Magyarországi EgyetemFaipari Mérnöki KarInformatikai Intézet
Soós Sándor2005. szeptember
A Java programozási nyelv Soós Sándor 2/20
Tartalomjegyzék
● Adatbázis programozás Java-ban● JDBC● Két- és háromrétegű adatbázis-elérési modell● JDBC-ODBC kapcsolat● Adatbázis URL● Hibakezelés● SQL utasítások végrehajtása● Az SQL utasítás eredményének feldolgozása● Az SQL kurzor mozgatása● Az aktuális sor feldolgozása● Adatforrás definiálása
A Java programozási nyelv Soós Sándor 3/20
Adatbázis programozás Java-ban
● A JDBC fogalma:– programozói interface (API) SQL (Structured Query
Language) utasítások végrehajtására– bár a JDBC önálló márkanév, mégis szokás Java
DataBase Connectivity-nek is nevezni (Java Adatbázis Összeköttetés)
● Mit jelent az API?– Application Programming Interface– Alkalmazás Programozási Interfész– Programozók számára készített eszközkészlet, könyvtár
valamilyen feladatot megoldó programok készítésére– Pl. Windows API
A Java programozási nyelv Soós Sándor 4/20
JDBC
● A JDBC API szolgáltatásai– Összekapcsolódás a relációs adatbázissal– SQL utasítások végrehajtása– SQL lekérdezések eredményeinek feldolgozása
● A JDBC két szintje:– JDBC alap (Core) API: java.sql csomag
● az adatbázisok eléréséhez szükséges alapvető osztályok– JDBC standard kiterjesztés (Extension) API: javax.sql
● további haladó szintű osztályok, pl. Java Tranzakció API (JTA)● A JDBC alkalmazásával a programjaink nemcsak
platformfüggetlenek, hanem adatbáziskezelő függetlenek is lehetnek.
A Java programozási nyelv Soós Sándor 5/20
Két- és háromrétegű adatbázis-elérési modell
● Kétrétegű modell:– Java program– Adatbázis
● Háromrétegű modell:– Java program– Szolgáltató réteg– Adatbázis
● A két, illetve három réteg 1, 2, vagy akár 3 gépen is elhelyezkedhet. A Java mindkét megoldást támogatja.
● Akár a Szolgáltató réteg is megírható Java-ban.
A Java programozási nyelv Soós Sándor 6/20
JDBC meghajtó programok (Driver)
● A JDBC API és a különböző adatbáziskezelő programok közötti kommunikációt a különböző meghajtó programok biztosítják.
● Ezeket külön-külön megírják az adatbáziskezelő programok készítői.
● A szükséges meghajtót, vagy meghajtókat regisztráljuk a JDBC alá, ettől kezdve a programunk képes kommunikálni az adott adatbáziskezelővel.
A Java programozási nyelv Soós Sándor 7/20
JDBC-ODBC kapcsolat
● ODBC – Open Database Connectivity– A legelterjedtebb adatbázis-hozzáférési API– platformfüggő– a Windows 2000 és XP is támogatja– nem objektumorientált
● A JDBC-hez létezik ODBC meghajtó, aminek segítségével használható minden ODBC meghajtóval rendelkező adatbázis.– a driver neve: sun.jdbc.odbc.JdbcOdbcDriver– ezt fogjuk regisztrálni.
A Java programozási nyelv Soós Sándor 8/20
Kapcsolattartás az adatbázissal
● A program és az adatbázis közötti kapcsolatot a Connection osztály reprezentálja.
● Egy program több adatbázissal is kapcsolatot tarthat egy időben. Ehhez egy-egy példányt kell létrehoznunk a Connection osztályból.
● Egy Connection típusú objektum a kiadott SQL utasításokat és azok eredményeit tartalmazza.
A Java programozási nyelv Soós Sándor 9/20
Adatbázis URL
● Az elérni kívánt adatbázist az Internetről ismert URL technikával adjuk meg.
● Az URL tartalmazza: – a használandó protokollt– az adatbázis azonosítóját– esetleges további paramétereket, pl. login név, jelszó
● Egy ODBC adatforrás eléréséhez a következő URL-t használjuk:– jdbc:odbc:<ODBC adatforrás neve>– Például: jdbc:odbc:Cimek
A Java programozási nyelv Soós Sándor 10/20
Kapcsolat felvétel az adatbázissal
● Betöltjük, vagy a DriverManager-rel betöltetjük a szükséges adatbázis meghajtót.
● A DriverManager-től "elkérjük" a kívánt adatkapcsolatot megadva neki az adatbázis URL-t.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con =
DriverManager.getConnection( "jdbc:odbc:Cimek","login név","jelszó" );
A Java programozási nyelv Soós Sándor 11/20
Hibakezelés
● Ha adatbáziskezelés során valamilyen hiba lép fel, akkor egy SQLException kerül kiváltásra.
● A hiba szövegét a getMessage metódussal kaphatjuk meg.
A Java programozási nyelv Soós Sándor 12/20
SQL utasítások végrehajtása
● Erre szolgál a Statement interface.● A fennálló kapcsolatot reprezentáló Connection
objektum createStatement metódusával létrehozunk egy utasítás objektumot. Ezzel még nem határoztuk meg a végrehajtandó SQL utasítást. Ezt három metódussal tehetjük meg:– executeQuery: Eredménytáblát visszaadó utasítások
futtatására (SELECT)– executeUpdate: adatmanipulációs (INSERT, UPDATE,
DELETE) és adatdefiníciós (CREATE/DROP TABLE) utasítások futtatására
– execute: mindkét típus végrehajtására alkalmas
A Java programozási nyelv Soós Sándor 13/20
Az SQL utasítás eredményének feldolgozása
● Egy SQL utasításnak többféle eredménye lehet, ezért nem lehet egyszerűen a metódus által visszaadott értékben visszaadni.
● A Statement különböző metódusai segítenek:– getUpdateCount(): a megváltozott sorok száma. Ezt
adja vissza az ExecuteUpdate metódus is. – getResultSet(): az eredménytábla. Ezt adja vissza az
ExecuteQuery metódus is.– getMoreResults(): a következő eredménykomponens
feldolgozása● Nézzük meg a DBResult.java fájlt!
A Java programozási nyelv Soós Sándor 14/20
Az eredménytábla feldolgozása
● Egy SQL lekérdezés eredménye mindig egy eredménytábla (ResultSet) objektum.
● Az eredménytábla méretét nem lehet előre meghatározni, ezért pufferelve kapjuk meg.
● A pufferből is egyszerre egy sort látunk, erre mutat az SQL kurzor.
● Kezdetben az első sor elé mutat az SQL kurzor.● Az SQL kurzor mozgatására különböző
lehetőségeink vannak.
A Java programozási nyelv Soós Sándor 15/20
Az SQL kurzor mozgatása
● next(): a következő sorra lép. Hamisat ad vissza, ha nincs több sor● previous(): az előző sorra lép. Hamisat ad vissza, ha nincs több
sor● last(): az utolsó sorra lép. Hamisat ad vissza, ha üres az
eredménytábla● first(): az első sorra lép. Hamisat ad vissza, ha üres volt az
eredménytábla● afterlast(): az utolsó sor utánra lép● beforefirst(): az első sor elé lép● absolute(): az adott sorszámú sorra lép. Ha negatív a szám, akkor
hátulról számol.● relative(): relatívan mozgatja a kurzort
– Az eredménytábla típusa befolyásolja, hogy mely léptetések használhatók.
– A sorok számozása 1-el kezdődik!
A Java programozási nyelv Soós Sándor 16/20
Az aktuális sor feldolgozása
● Az aktuális sor adatainak lekérdezése: getMetaData()● Ez a metódus visszaad egy ResultSetMetaData
interface-t. Ennek metódusai adják vissza a különböző jellemzőket. Lásd a dokumentációban!
● Például a getColumnCount() adja meg az oszlopok számát.
● Az egyes adatmezőket getTípus() formájú metódusokkal lehet lekérdezni paraméterként megadva az oszlop sorszámát. Az oszlopokat 1-től számozzuk.– Például: getString(1), getInt(3), stb.
A Java programozási nyelv Soós Sándor 17/20
Az aktuális sor módosítása
● Módosítható eredménytábla esetén updateTípus() formájú metódusokkal lehet módosítani a mezők tartalmát.
● Ezután az updateRow() metódussal kell véglegesíteni a módosításokat.
● A deleteRow() metódussal lehet törölni az aktuális sort
A Java programozási nyelv Soós Sándor 18/20
Új sor beszúrása
● Új sor beszúrása a beszúrási puffer segítségével lehetséges.
● A moveToInsertRow() metódussal érhetjük el a beszúrási puffert.
● Ezután az előbbi updateTípus() metódusokkal lehet beállítani a mezőket, majd az insertRow() metódussal véglegesítjük a beszúrást.
● A moveToCurrentRow() metódussal térhetünk vissza a beszúrás előtti aktuális sorra, vagy valamelyik abszolút léptető utasítással bármelyikre.
A Java programozási nyelv Soós Sándor 19/20
Adatforrás definiálása
● Adatforrás létrehozása Windows 2000-ben:– Vezérlőpult– Felügyeleti eszközök– Adatforrások (ODBC)– Add (Hozzáadás)– Microsoft Access Driver (*.mdb) – Befejezés gomb– Adatforrás neve: xy– Kiválasztás gomb– Speciális gomb
● Felhasználónév● Jelszó
– OK gomb
A Java programozási nyelv Soós Sándor 20/20
Példa
● Nézzük meg a DBTanulok.java fájlt!