A Java programozási nyelvSoós Sándor 1/20 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 szeptember
A Java programozási nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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: – Például: jdbc:odbc:Cimek
A Java programozási nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoó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 nyelvSoós Sándor 20/20 Példa ● Nézzük meg a DBTanulok.java fájlt!