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 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 4/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 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:<odbc adatforrás neve> 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