Java Programozás 10. Ea: JDBC. SQLite alapokon

Hasonló dokumentumok
Java Programozás 10. Ea: JDBC. SQLite alapokon

B IT MAN 43/1 B IT MAN. Adatbázis Rendszerek II. Ellenőrző kérdések JDBC. v:


Java programozási nyelv 11. rész Adatbázis-programozás

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

B I T M A N B I v: T M A N

Adatbázisok webalkalmazásokban

Adatbázis Rendszerek II. 7. Oracle JDBC

B I T M A N B I v: T M A N

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő A PHP programozási nyelv JDBC, ODBC

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

JDBC Adatbáziskapcsolat objektumok SQL parancsok küldése Kötegelt módosítások ResultSet Tranzakciók

JAVA PROGRAMOZÁS 8.ELŐADÁS

Java Database Connectivity (JDBC)

Java és web programozás

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Java és web programozás

A Java nyelv. VI. Adatbázis-kezelés Javaban, Példaprogram Az elôzô részben láthattuk, hogy a Java ideális programozási nyelv perszisztens objektumok

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Kapcsolat objektumok. Válasz feldolgozása Tranzakciók DAO tervezési minta

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

JDBC Adatbáziskapcsolat objektumok SQL parancsok küldése Kötegelt módosítások ResultSet Tranzakciók DAO tervezési minta 1 / 45

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

JDBC. A JDBC alkalmazása

Témák. JDBC Adatbázisok JDBC használatának lépései Tranzakciók Adatbázis tervezés EK diagram

Database Systems II. ZH összefoglaló

Programozási technológia

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Kliens oldali SQL-API

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

JavaServer Pages (JSP) (folytatás)

MDAC - Microsoft Data Access Components

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

PHP-MySQL. Adatbázisok gyakorlat

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

SZAKDOLGOZAT. Szabó Attila

Vizuális programozás gyakorlat

Adatbázis Rendszerek II. 8. Gyakorló környezet

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Segédanyag: Java alkalmazások gyakorlat

Az SQL*Plus használata

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

Adatbázis rendszerek 7. előadás State of the art

OOP: Java 8.Gy: Abstract osztályok, interfészek

ANDROID ALKALMAZÁSFEJLESZTÉS

JDBC - adatbáziskezelés

Entity Framework alapú adatbáziselérés

Adatbázis Rendszerek II. 2. Gyakorló környezet

7. K: JAVA alapok Konzultáció

Java Programozás 11. Ea: MVC modell

Adatbázisok gyakorlat

AdoDB a gyakorlatban

Szoftvertechnológia alapjai Java előadások

B I T M A N B I v: T M A N

OOP: Java 8.Gy: Gyakorlás

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Tranzakciókezelés PL/SQL-ben

Bevezető. Servlet alapgondolatok

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Programozási nyelvek Java

Segédanyag: Java alkalmazások gyakorlat

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

MySQL kontra MongoDB programozás. SQL és NoSQL megközelítés egy konkrét példán keresztül

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Bevezetés: az SQL-be

Java és web programozás

Adatbázis-kezelés. Harmadik előadás

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

és az instanceof operátor

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

SAP Business One. Áttekintés, gyakorlati ismertetı. Mosaic Business System Kft.; Support:

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Adatbázisok* tulajdonságai

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Web-fejlesztés NGM_IN002_1

Adatbázis rendszerek. dr. Siki Zoltán

Beszerzési logisztika támogatása az optimális beszállító kiválasztása révén

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Átírás:

Java Programozás 10. Ea: JDBC SQLite alapokon 62/1 B ITv: MAN 2018.02.05

SQLite Az SQLite önálló, fájl alapú, kisméretű, C forrású programkönyvtárként megvalósított ACID-kompatibilis relációs adatbázis-kezelő rendszer, illetve adatbázismotor. A szoftvert D. Richard Hipp tervezte és alkotta meg. Az SQLite forráskódja nyílt, közkincsnek számít. Egyre több népszerű szoftver használja: 62/2 Mozilla Firefox Adobe Reader, Acrobat, Photoshop Airbus Apple Facebook Microsoft Google PHP

SQLite Jellemzők: 62/3 Az SQLite megvalósítja az SQL-92 szabvány nagy részét, így pl. részlegesen támogatja a triggereket és a legtöbb komplex / összetett lekérdezést Nincs benne a hagyományos SQL rendszerekben megszokott szigorú mezőtípus-kezelés, csak gyengén típusos, a mezőknek típus helyett affinitásuk (preferált típus) van. Pl: String típusú adat beilleszthető integer affinitású oszlopba; ha az SQLite sikeresen tudja konvertálni integerré, akkor úgy tárolja, egyébként meghagyja az adat eredeti típusát! Kis erőforrás igényű (1 MB alatti méretű az adatbázis motor) Több szálon futtatható, több felhasználós rendszer Sok programnyelvből elérhető: BASIC, C, C++, Java, C#, Visual Basic, PHP, Ruby, Python

SQLite Letöltése: 62/4

SQLite JDBC driver letöltése: 62/5

SQLite Telepítés: Hozzunk létre egy könyvtárat az adatbázis kezelő számára, és csomagoljuk ki oda a dll-t és a tools-t. Kész! Lépjünk be a Java munkakönyvtárunkba, és csomagoljuk ki oda a jdbc drivert. Kész! 62/6

SQLite Kipróbálás: Indítsuk el a Parancssort Lépjünk át az adatbázis könyvtárába. Indítsuk el az adatbázist: sqlite3 Írassuk ki a rendszerdátumot: select date('now'); Működik! Help:.help Kilépés:.quit 62/7

SQLite Adatbázis létrehozása Ha csak elindítjuk a szervert, akkor az csak a memóriában kezeli az adatokat. Ahhoz, hogy az adatok megmaradjanak, létre kell hozni egy adatbázist. A létrehozott adatbázisfájl a munkakönyvtárba kerül, neve az lesz, amit megadtunk (lehet tetszőleges a kiterjesztése!) Adjuk ki a.open empdb.db parancsot, így létrejön az empdb.db adatbázis. Ha nem kapunk hibaüzenetet, a parancs rendben lefutott! 62/8

SQLite Tábla létrehozása Megnyitni egy adatbázis a.open név paranccsal lehet A létrehozott / megnyitott adatbázisban gépeljük be a következő parancsot: create table emp( kod integer primary key, nev text, szulido date, lakohely text, iq integer); 62/9 Több sorba beírt parancsnál a > jelzi, hogy a parancs még nem fejeződött be. A parancs végét a ; jelzi az értelmezőnek A beírt parancs végén ENTER Ha nem kapunk hibaüzenetet, a parancs rendben lefutott!

SQLite Adatbevitel Írjuk be a következő parancsokat: insert into emp values(31,"jég Elek","1985.05.06","Miskolc",112); insert into emp values(32,"rossz Géza","1981.11.09","Miskolc",105); insert into emp values(33,"keksz Zoé","1993.02.13","Eger",125); Írassuk ki az adatainkat: select * from emp; Kész! Jöhet a távoli adatelérés JDBC-vel! 62/10

62/11

A cél: Javás kliensről manipulálni az adatbázist. 62/12

A probléma és megoldása A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges egy interfész, ennek kezelése lehet adatbázis függő API-hívások JNI-n keresztül (Java Native Interface), de lehet adatbázis független is JDBC (Java Data Base Connectivity). Adatmanipulációs nyelv mindkét esetben az SQL marad. 62/13

JDBC API Java nyelven íródott osztályokat és interfészeket tartalmazó csomagok, melyek egy standard API-t biztosítanak adatbázis-keretrendszerek, valamint adatbázis alapú alkalmazások fejlesztésére. A JDBC API előnye abban áll, hogy elvileg bármilyen adatforrást elérhetünk vele bármilyen platformon, melyen a java virtuális gép futtatható. Nem kell tehát minden adatbázisszerverre külön programot írni, hanem ugyanaz a kód működni fog bármely adatbázisszerverrel. 62/14

JDBC használat Adatbázis feltétel: szükséges egy meghajtó-program (driver), amellyel az adatbázis-kezelő kielégíti a JDBC specifikációt. A driver rendszerfüggő, az adatbázis gyártójának weblapjáról kell letölteni. Java programozó: a java.sql és a javax.sql csomagokban található osztályok, metódusok segítségével dolgozik, és a programhoz csatolja a használt adatbázis-kezelő JDBC driver-ét. 62/15

A megoldás (1.) Kétrétegű megoldás Kliens-oldal Szerver-oldal SQL Driver Piros, Kék, Zöld 62/16

A megoldás (2.) Háromrétegű megoldás Kliens-oldal Szerver-oldal Alkalmazás DB SQL Driver Piros, Kék, Zöld 62/17

Az adatbázis-programozás lépései Driver regisztrálása Kapcsolódás a DBMS-hez SQL kérés (STATEMENT) összeállítása Kapcsolódás Lekérdezés SQL kérés elküldése 62/18 Az eredményhalmaz (CURSOR) rekordonkénti bejárása Az értékek átadása programváltozóknak Eredményhalmaz lezárása SQL kérés lezárása Kapcsolat lezárása Eredmények feldolgozása Lekapcsolódás

JDBC alapok Kliens számítógép SQLite SQLite 62/19

JDBC osztályok/interfészek DriverManager getconnection preparestatement Connection extends Statement PreparedStatement extends Class Interface CallableStatement executequery setxxx DataType 62/20 ResultSet

Az adatbázis-programozás lépései Kapcsolódás Driver regisztrálása 1. Lekérdezés Kapcsolódás a DBMS-hez 2. Eredmények feldolgozása Lekapcsolódás 62/21

A Driver (meghajtó) betöltése (1) Feltétel: a Java keresési útvonalán elérhető legyen a fizikai driver. SQLite-hoz: sqlite-jdbc-3.21.0.jar Kialakítása: 1. Másoljuk be a drivert a Java munkakönyvtárba (megtörtént) 2. Készítsünk a könyvtárba egy ini.bat nevű fájlt, tartalma: 3. Ha beléptünk a könyvtárba, indítsuk el a fájlt: ini 62/22

A driver regisztrálása Ha a driver elérhető a keresési útvonalon, regisztrálható Javaban: import java.sql.*; 1. public void Reg(){ try { Class.forName("org.sqlite.JDBC"); } catch (ClassNotFoundException e) { System.out.println("Hibás driver regisztráció!"+e.getmessage()); } } Ha nem regisztráljuk a drivert, a DriverManager kapcsolódáskor megpróbálja megkeresni a drivert. A keresési útvonalat végignézi, és ha van a kérésnek megfelelő driver, akkor azon keresztül teremt kapcsolatot! 62/23

A DriverManager működése A DriverManager osztály tartalmaz egy listát a regisztrált driverekkel. A getconnection() metódus hívásakor megpróbálja megtalálni a megfelelő drivert, mely kapcsolódni tud az URL-ben megadott adatbázishoz (sorba kipróbálja a drivereket, míg egyet talál, amely kapcsolódik a megfelelő URL segítségével) Ezt a manager-szintet el lehet kerülni direkt Driver metódus hívásával. (csak ritkán használjuk, pl. ha két driver is van, amelyik hozzá tud kapcsolódni egy bizonyos adatbázishoz és explicit szeretnénk meghatározni, hogy melyikkel akarunk kapcsolódni.) 62/24

JDBC driver-ek A driver egy kliens oldali adapter (program), mely a java program kéréseit átalakítja az adatbázisszerver számára értelmezhető formára, és az adatbázisszerver által küldött válaszokat visszaalakítja a java program számára értelmezhető formára. Besorolásuk (típusok): Type 1: JDBC ODBC átjáró (híd), Type 2: JDBC Natív API driver Type 3: JDBC Hálózat protokoll (köztesréteg driver) Type 4: JDBC Direkt adatbázis driver 62/25

Type 1: JDBC ODBC átjáró Java program Type 1 Adatbázis kezelő program JDBC- ODBC átjáró ODBC driver Natív program könyvtár hálózati adatbázis protokoll Adatbázis Kliens oldal Szerver oldal 62/26 Már meglévő ODBC driver használatát teszi lehetővé A Type 1 driver átalakítja a JDBC hívásokat ODBC hívásokká Az ODBC driver egy az adatbázis gyártója által készített driverhez (natív program könyvtár) kapcsolódik, ez már eléri az adatbázist Ez a leglassabb driver típus

Type 2: JDBC Natív API driver Java program Type 2 Natív API driver Natív program könyvtár Kliens oldal Adatbázis kezelő program hálózati adatbázis protokoll Szerver oldal Adatbázis 62/27 Natív program könyvtár: az adatbázis típusától függő, az adatbázis készítői által írt driver. (Natív Közvetlenül érthető, nem igényel további átalakítást, konvertálást. A Type 2 JDBC driver a JDBC hívásokat közvetlenül átalakítja az adott típusú adatbázis API hívásaira. Gyorsabb, mint a Type 1 JDBC driver. Ilyen típusúak pl. az Oracle oci driverek.

Type 3: JDBC Hálózati protokoll (köztesréteg driver) Java program Type 3 Hálózati protokoll Alkalmazás szerver Adatbázis kezelő program hálózati adatbázis protokoll Adatbázis Kliens oldal Köztes réteg Szerver oldal 62/28 A Javában írt, hordozható driver a JDBC hívásokat adatbázisfüggetlen hálózati protokollhívásokká alakítja, melyeket egy megfelelő szerverprogram értelmez és alakít át az adott adatbáziskezelő API-jának hívásaivá. A Type 3 JDBC driver nem közvetlenül az adatbázissal, hanem egy külön szerverprogrammal kommunikál.

Type 4: JDBC Direkt adatbázis driver Java program Type 4 Direkt adatbázis driver Adatbázis kezelő program hálózati adatbázis protokoll Adatbázis Kliens oldal Szerver oldal Javában írt meghajtó program, amely a JDBC hívásokat közvetlenül a megfelelő adatbázis-kezelő adatmanipulációs protokolljának hívásaivá alakítja át. Nincs szükség közbenső szerverprogramra. Ez a leggyorsabb driver típus. Ilyen típusú az SQLite driver. 62/29

Kapcsolat létrehozása import java.sql.*; private static Connection conn = null; public void Connect() { try { String url = "jdbc:sqlite:c:/sqlite3/empdb.db"; conn = DriverManager.getConnection(url); System.out.println("Connection OK!"); } catch (SQLException e) { System.out.println("JDBC Connect: "+e.getmessage(), 0); } } 2. A DriverManager-től kérünk egy Connection-t (kapcsolatot), és ezen a kapcsolaton keresztül kezeljük ezután az adatbázis adatait. Az url függ a driver és az adatbázis típusától, az adatbázis helyétől, más adatbázisok esetén tartalmazza a user nevét és jelszavát is. 62/30

Az adatbázis-programozás lépései Kapcsolódás Lekérdezés SQL kérés (Statement) vagy 3. (PreparedStatement) összeállítása Eredmények feldolgozása SQL kérés elküldése 4. Lekapcsolódás 62/31

Munka az adatbázisban Amint a kapcsolat létrejött, az adatbázisnak küldhetünk SQL parancsokat. A JDBC API nem korlátoz a kiadható SQL parancsok tekintetében: azaz adatbázis-specifikus, de akár nem SQL parancsokat is használhatunk. Azt azonban biztosítanunk kell, hogy az adatbázis fel tudja dolgozni a parancsokat. Pl. hívhatunk tárolt eljárásokat egy olyan adatbázisra, amelyik nem támogatja ezeket, de ez esetben a kód kivételt fog kiváltani. A munkavégzést három kategóriába sorolhatjuk: Egyszer kiadandó parancsok Ismétlődő (paraméterezhető) parancsok Lekérdezések, melyeknek visszatérő adathalmaz az eredménye 62/32

Munka az adatbázisban Egyszer kiadandó parancsok Statikus parancsok, melyeket nem lehet ciklikusan egymás után többször végrehajtani Pl: Insert, Update, Delete, Create, Drop, Alter Lehet paraméterük, de a paraméterekkel összeépített parancs egy statikus parancsként kerül végrehajtásra 62/33 Küldésére a Statement interfész használható A Statement egy paraméter nélküli SQL parancs fogadására kéri fel adatbázist Végrehajtására az alábbi metódusok használhatók: execute("sqlp"); executeupdate("sqlp");

Statement létrehozása, végrehajtása public void insert(int k, String n, String d, String l, int i){ String sqlp = "insert into emp values("+k+", '"+n+ 3. "', '"+d+"', '"+l+"', "+i+")"; System.out.println(sqlp); try { s = conn.createstatement(); s.execute(sqlp); 4. System.out.println("insert OK!"); } catch (SQLException e) { System.out.println("JDBC insert: "+e.getmessage()); } } insert(35,"bőr Önd","1980.01.01","Miskolc",66); 62/34

Munka az adatbázisban Ismétlődő (paraméterezhető) parancsok Dinamikus parancsok, melyeket lehet ciklikusan egymás után többször végrehajtani Átküldjük az adatbázisnak a parancs szerkezetét, melyben?-ek jelzik a változó paramétereket, ezután ciklusban beállítjuk a paraméterek értékét, és végrehajtjuk a parancsot 62/35 Küldésére a PreparedStatement interfész használható Mely egy paraméteres SQL parancs fogadására kéri fel adatbázist Végrehajtására az alábbi metódusok használhatók: execute("sqlp"); executeupdate("sqlp");

PreparedStatement létrehozása, végrehajtása public void insertall(emp[] t) { 62/36 } String sqlp = "insert into emp(kod,nev,szulido,lakohely,iq) String date=""; try { pstmt = conn.preparestatement(sqlp); for (int i = 0; i < t.length; i++) { } pstmt.setint(1, t[i].getkod()); pstmt.setstring(2, t[i].getnev()); date = sdf.format(t[i].getszulido()); pstmt.setstring(3, date); pstmt.setstring(4, t[i].getlakohely()); pstmt.setint(5, t[i].getiq()); pstmt.execute(); System.out.println("Adatok kiírva!"); values(?,?,?,?,?)"; } catch (SQLException e) {System.out.println(e.getMessage());} 3. 4. public class Emp { private int kod; private String nev; private Date szulido; private String lakohely; private int iq;

Az adatbázis-programozás lépései Kapcsolódás Lekérdezés Az eredményhalmaz (CURSOR) visszakérése: ResultSet 5. Eredmények feldolgozása A ResultSet rekordonkénti bejárása, az értékek átadása programváltozóknak 6. Lekapcsolódás 62/37

Munka az adatbázisban Lekérdezések Adatokat adnak vissza A visszaadott adatszerkezet SQL neve: CURSOR A visszaadott adatszerkezet Java neve: ResultSet A parancskiadás interfésze általában Statement Lehet PreparedStatement is A végrehajtás metódusa: executequery("sqlp"); Az adatokat a getresultset() metódussal kérjük vissza, és egy ResultSet-ben kapjuk vissza. Ciklussal bejárjuk a ResultSet-et, átadjuk az értékeket program változóknak, és feldolgozzuk azokat. Végül lezárjuk a ResultSet-et. 62/38

ResultSet használata public void selectall(){ String nev="", szid="", lak=""; int kod=0, iq=0; String sqlp= "select * from emp"; try { s = conn.createstatement(); rs = s.executequery(sqlp); 5. while(rs.next()) { kod = rs.getint("kod"); nev = rs.getstring("nev"); 6. szid = rs.getstring("szulido"); lak = rs.getstring("lakohely"); iq = rs.getint("iq"); System.out.println(""+kod+": "+nev+": "+szid+": "+lak+": "+iq); } rs.close(); System.out.println("selectAll completed!"); 62/39 } } catch (SQLException e) {System.out.printlne.getMessage());}

Az adatbázis-programozás lépései Kapcsolódás Lekérdezés Eredmények feldolgozása Eredményhalmaz lezárása SQL kérés lezárása 7. 8. Lekapcsolódás Kapcsolat lezárása 9. 62/40

Erőforrások felszabadítása ResultSet lezárása: rs.close(); 7. Statement lezárása: stmt.close(); PreparedStatement lezárása: pstmt.close(); 8. Kapcsolat lezárása: public void disconnect(){ 9. try { conn.close(); } catch (SQLException e) {System.out.println(e.getMessage());} } 62/41

A main program import java.sql.*; import java.text.simpledateformat; import java.text.parseexception; import java.util.date; public class Main { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); private static Connection conn = null; private static Statement s = null; private static ResultSet rs = null; private static PreparedStatement pstmt = null; public static void main(string[] args) { 62/42 Emp[] emp = new Emp[3];

A main program emp[0] = new Emp(36,"Kis Ábel",StoD("1985.01.31"),"Ózd",97); emp[1] = new Emp(37,"Kis Erwin",StoD("1992.07.14"),"Eger",116); emp[2] = new Emp(38,"Kis Farkas",StoD("1987.12.06"),"Miskolc",125); } Connect(); insert(35,"bőr Önd","1980.01.01","Miskolc",66); insertall(emp); selectall(); disconnect(); } public static Date StoD(String s){ Date testdate = null, vid = null; try {testdate = sdf.parse(s);} catch (ParseException e){return vid;} if (!sdf.format(testdate).equals(s)){return vid;} return testdate; } 62/43

Munka az adatbázisban JDBC interfészek SQL parancsok küldésére: 1. Statement paraméter nélküli SQL parancsok hívására 2. PreparedStatement paraméteres (?), előfordított SQL parancsok hívására 3. CallableStatement Tárolt eljárásokhoz (az SQLite nem támogatja, sem a hívást, sem a tárolt eljárásokat!) Végrehajtási módok: 1. executeupdate(): Adatmanipulációs (DML: insert, update, delete) és adatdefiníciós (DDL: create/drop/alter) utasítások futtatására 2. executequery(): Eredménytáblát visszaadó utasítások futtatására (SELECT) 3. execute(): 62/44 Mindkét típus végrehajtására alkalmas

JDBC osztályok/interfészek DriverManager getconnection preparestatement Connection extends Statement PreparedStatement extends CallableStatement executequery setxxx DataType 62/45 ResultSet

62/46

Teszt 1. Hány féle JDBC driver típus létezik? 1 2 3 4 5 Rengeteg, hiszen nagyon sok féle adatbázis létezik 62/47

Teszt 2. Melyik interfész nem létezik JDBC-ben? Statement PrepareStatement PreparedStetament CallableStatement 62/48

Teszt 3. Mi az azonosító stringje as SQLite jdbc driver-nek? org.sqlite.jdbc JDBC:sqlite JDBC:sqlite.org sqlite.jdbc 62/49

Teszt 4. Melyik kódsor helyes? ResultSet rs = stmt.selectquery("select * from "); ResultSet rs = stmt.executeselect ("select * from "); ResultSet rs = stmt.runquery ("select * from "); ResultSet rs = stmt.executequery ("select * from ") 62/50

Teszt 5. Milyen sorrendben követik egymást a kifejezések? Kezdje a számozást a kódban a legkorábban előforduló kifejezéssel! 4 2 5 1 3 STATEMENT CONNECTION RESULTSET DRIVER SQL parancs 62/51

Teszt 6. Egészítse ki a kódot! public?1???? LeKapcs(){ if (conn?2????) { try { conn.?3????; d.printf("sikeres lekapcsolódás"); }?4????(Exception?5????) { System.err.println(ex.getMessage()); } } } 62/52 1. 2. 3. 4. 5.

Teszt 7. Melyik metódussal lehet végrehajtani egy SQL select parancsot? execute() executequery() executeupdate() ExecuteCommand() 62/53

Teszt 8. A preparestatement() metódus egy SQL kifejezést küld az adatbázisnak. Mi a visszatérő adat (válasz) típusa? ResultSet Integer típusú szám preparestatement objektum PreparedStatement objektum 62/54

Teszt 9. Melyik kód helyes? String sql="select * from melos"; Statement st=conn.createstatement(sql); ResultSet rs=st.executequery() String sql="select * from melos"; Statement st=conn.createstatement(); ResultSet rs=st.executequery(sql); String sql="select * from melos"; Statement st=createstatement(sql); ResultSet rs=conn.executequery(st); 62/55

Teszt 10. Javítsa ki a kódban a hibákat! public void Select(){ String sqlp = "select id,nev from melos"; String nev="", id=""; try { s = createstatement(); s.executeupdate(sql); s = rs.getresultset(); while(rs.notempty()) { id = s.getnumber("mid"); nev = s.getstring("név"); d.printf(id+"-"+nev); } conn.close(); rs.close(); } cath(exception e) d.printf(e.geterror()); } 62/56 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Teszt 11. Az ábrán egy JDBC lekérdezés vázlata látható! Adja meg a hiányzó kifejezéseket! 1. 2. 3. 62/57

Teszt 12. Melyik csomagot kell importálni ahhoz, hogy JDBC-ben dolgozni tudjunk? java.sql.*; java.sqlx.*; java.jdbc.sql.*; java.jdbc.*; Az A és a B csomag is szükséges. 62/58

Teszt 13. Igaz vagy hamis? Egy ResutSet-ből a getrow() utasítással egy teljes sornyi adatot ki lehet olvasni egyszerre. Az állítás igaz. Az állítás hamis A PreparedStatement a Statement leszármazottja.. Az állítás igaz. Az állítás hamis 62/59

Teszt 14. Melyik állítás helyes a JDBC-vel kapcsolatban? A JDBC egy API különböző típusú adatbázisok elérésére A JDBC jelentése: Java DataBase Connectivity JDBC-vel objektum orientált adatbázisok is elérhetők A JDBC az ODBC java megvalósítása Adatbázisok elérését teszi lehetővé java nyelven A Jdbc egy java osztály neve, erről kapta a technológia a nevét A JDBC támogatja a kapcsolat nélküli adatkezelést 62/60

Teszt 15. Az ábrán egy JDBC lekérdezés vázlata látható! Adja meg a hiányzó kifejezéseket! 1. 2. 3. 62/61

VÉGE VÉGE 62/62