210 likes | 311 Views
Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember. Java programozási nyelv 11 . rész – Adatbázis-programozás. Tartalomjegyzék. Adatbázis programozás Java-ban JDBC Két- és háromrétegű adatbázis-elérési modell JDBC-ODBC kapcsolat
E N D
Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember Java programozási nyelv11. rész – Adatbázis-programozás
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
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
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.
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.
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.
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.
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.
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
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ó" );
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.
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
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!
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.
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!
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.
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
Ú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.
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
Példa • Nézzük meg a DBTanulok.java fájlt!