Java programozási nyelv 11. rész – Adatbázis-programozás Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember
A Java programozási nyelv
Soós Sándor
1/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
2/20
Adatbázis programozás Javaban ●
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
3/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 ●
–
JDBC standard kiterjesztés (Extension) API: javax.sql ●
●
az adatbázisok eléréséhez szükséges alapvető osztályok 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
4/20
Két- és háromrétegű adatbázis-elérési modell ●
Kétrétegű modell: – –
●
Háromrétegű modell: – – –
●
●
Java program Adatbázis 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
5/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
6/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
7/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
8/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ő URLt használjuk: – –
jdbc:odbc:
Például: jdbc:odbc:Cimek
A Java programozási nyelv
Soós Sándor
9/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
10/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
11/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
12/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
13/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
14/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
15/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
16/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
17/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
18/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
19/20
Példa ●
Nézzük meg a DBTanulok.java fájlt!
A Java programozási nyelv
Soós Sándor
20/20