10. ea: jdbc - users.iit.uni-miskolc.huszucs/jprog/oa/17_ea_09_jdbc_tm.pdf · a java...

62
B IT M A N 62/1 v: 2018.02.05 B IT M A N 10. Ea: JDBC Java Programozás SQLite alapokon

Upload: others

Post on 16-Oct-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/1 v: 2018.02.05B IT MAN

10. Ea: JDBC

Java Programozás

SQLite alapokon

Page 2: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/2

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:

– Mozilla Firefox

– Adobe Reader, Acrobat, Photoshop

– Airbus

– Apple

– Facebook

– Microsoft

– Google

– PHP

Page 3: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/3

SQLite

Jellemzők:

– 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…

Page 4: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/4

SQLite

Letöltése:

Page 5: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/5

SQLite

JDBC driver letöltése:

Page 6: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/6

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!

Page 7: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/7

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

Page 8: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/8

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!

Page 9: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/9

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:

– 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!

create table emp(kod integer primary key,nev text,szulido date,lakohely text,iq integer);

Page 10: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/10

SQLite

Adatbevitel

– Írjuk be a következő parancsokat:

Írassuk ki az adatainkat:

– select * from emp;

Kész! Jöhet a távoli adatelérés JDBC-vel!

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);

Page 11: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/11

Page 12: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/12

A cél:

Javás kliensről manipulálni az adatbázist.

Page 13: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/13

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.

Page 14: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/14

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.

Page 15: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/15

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.

Page 16: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/16

A megoldás (1.)

Kétrétegű megoldás

Szerver-oldal

SQL

Kliens-oldal

Piros, Kék, ZöldDriver

Page 17: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/17

A megoldás (2.)

Háromrétegű megoldás

Szerver-oldal

Alkalmazás

SQL

DB

Kliens-oldal

Piros, Kék, Zöld

Driver

Page 18: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/18

Az adatbázis-programozás lépései

Driver regisztrálása

Kapcsolódás a DBMS-hezKapcsolódás

SQL kérés (STATEMENT)

összeállítása

SQL kérés elküldése

Az eredményhalmaz (CURSOR)

rekordonkénti bejárása

Lekérdezés

Az értékek átadása

programváltozóknak

Eredményhalmaz lezárása

SQL kérés lezárása

Eredmények

feldolgozása

Lekapcsolódás

Kapcsolat lezárása

Page 19: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/19

JDBC alapok

Kliens számítógépSQLite

SQLite

Page 20: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/20

PreparedStatement

Connection

DriverManager

ResultSet

ge

tCo

nn

ectio

np

rep

are

Sta

tem

en

tStatement

extends extendsCallableStatement

exe

cu

teQ

ue

ry

DataType

JDBC osztályok/interfészek

setXxx

Class

Interface

Page 21: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/21

Az adatbázis-programozás lépései

Lekapcsolódás

Driver regisztrálása

Kapcsolódás a DBMS-hez

Kapcsolódás

Lekérdezés

Eredmények

feldolgozása

1.

2.

Page 22: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/22

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

Page 23: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/23

A driver regisztrálása

Ha a driver elérhető a keresési útvonalon, regisztrálható Javaban:

import java.sql.*;

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!

1.

Page 24: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/24

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.)

Page 25: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/25

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

Page 26: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/26

Type 1: JDBC – ODBC átjáró

Adatbázis kezelő program

Adatbázis

hálózatiadatbázisprotokoll

Java program

JDBC-ODBC átjáró

ODBCdriver

Kliens oldal Szerver oldal

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

Natívprogramkönyvtár

Type 1

Page 27: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/27

Type 2: JDBC – Natív API driver

Adatbázis kezelő program

Adatbázis

hálózatiadatbázisprotokoll

Java program

Natív API

driver

Kliens oldal Szerver oldal

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.

Natívprogramkönyvtár

Type 2

Page 28: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/28

Type 3: JDBC – Hálózati protokoll (köztesréteg driver)

Adatbázis kezelő program

Adatbázis

hálózatiadatbázisprotokoll

Java program

Hálózatiprotokoll

Kliens oldal Szerver oldal

A Javában írt, hordozható driver a JDBC hívásokat adatbázis-

független hálózati protokollhívásokká alakítja, melyeket egy

megfelelő szerverprogram értelmez és alakít át az adott adatbázis-

kezelő 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.

Köztes réteg

Alkalmazás szerver

Type 3

Page 29: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/29

Type 4: JDBC – Direkt adatbázis driver

Adatbázis kezelő program

Adatbázis

hálózatiadatbázisprotokoll

Java program

Direkt adatbázis driver

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.

Type 4

Page 30: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/30

Kapcsolat létrehozása

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);

}

}

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.

import java.sql.*;private static Connection conn = null;

2.

Page 31: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/31

Az adatbázis-programozás lépései

Lekapcsolódás

Eredmények

feldolgozása

SQL kérés (Statement) vagy

(PreparedStatement) összeállítása

SQL kérés elküldése

Kapcsolódás

Lekérdezés3.

4.

Page 32: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/32

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

Page 33: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/33

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

– 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");

Page 34: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/34

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+

"', '"+d+"', '"+l+"', "+i+")";

System.out.println(sqlp);

try {

s = conn.createStatement();

s.execute(sqlp);

System.out.println("insert OK!");

} catch (SQLException e) {

System.out.println("JDBC insert: "+e.getMessage());

}

}

3.

insert(35,"Bőr Önd","1980.01.01","Miskolc",66);

4.

Page 35: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/35

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

– 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");

Page 36: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/36

PreparedStatement létrehozása, végrehajtásapublic void insertAll(Emp[] t) {

String sqlp = "insert into emp(kod,nev,szulido,lakohely,iq)

values(?,?,?,?,?)";

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!");

} 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;

Page 37: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/37

Az adatbázis-programozás lépései

Lekapcsolódás

Kapcsolódás

Az eredményhalmaz (CURSOR)

visszakérése: ResultSet

A ResultSet rekordonkénti

bejárása, az értékek átadása

programváltozóknak

Lekérdezés

Eredmények

feldolgozása

5.

6.

Page 38: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/38

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.

Page 39: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/39

ResultSet használatapublic void selectAll(){

String nev="", szid="", lak=""; int kod=0, iq=0;

String sqlp= "select * from emp";

try {

s = conn.createStatement();

rs = s.executeQuery(sqlp);

while(rs.next()) {

kod = rs.getInt("kod");

nev = rs.getString("nev");

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!");

} catch (SQLException e) {System.out.printlne.getMessage());}

}

5.

6.

Page 40: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/40

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

Kapcsolat lezárásaLekapcsolódás

7.

8.

9.

Page 41: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/41

Erőforrások felszabadítása

ResultSet lezárása: rs.close();

Statement lezárása: stmt.close();

PreparedStatement lezárása: pstmt.close();

Kapcsolat lezárása:

public void disConnect(){

try {

conn.close();

} catch (SQLException e) {System.out.println(e.getMessage());}

}

7.

8.

9.

Page 42: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/42

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) {

Emp[] emp = new Emp[3];

Page 43: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/43

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;

}}

Page 44: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/44

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():

Mindkét típus végrehajtására alkalmas

Page 45: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/45

PreparedStatement

Connection

DriverManager

ResultSet

ge

tCo

nn

ectio

np

rep

are

Sta

tem

en

tStatement

extends extendsCallableStatement

exe

cu

teQ

ue

ry

DataType

JDBC osztályok/interfészek

setXxx

Page 46: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/46

Page 47: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/47

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

Page 48: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/48

Teszt 2.

Melyik interfész nem létezik JDBC-ben?

Statement

PrepareStatement

PreparedStetament

CallableStatement

Page 49: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/49

Teszt 3.

Mi az azonosító stringje as SQLite jdbc driver-nek?

org.sqlite.JDBC

JDBC:sqlite

JDBC:sqlite.org

sqlite.JDBC

Page 50: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/50

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 …")

Page 51: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/51

Teszt 5.

STATEMENT

CONNECTION

RESULTSET

DRIVER

SQL parancs

Milyen sorrendben követik egymást a kifejezések?

Kezdje a számozást a kódban a legkorábban előforduló

kifejezéssel!

1

2

3

4

5

Page 52: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/52

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());

}}

}

1. __________________________________

2. __________________________________

3. __________________________________

4. __________________________________

5. __________________________________

Page 53: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/53

Teszt 7.

Melyik metódussal lehet végrehajtani egy SQL select

parancsot?

execute()

executeQuery()

executeUpdate()

ExecuteCommand()

Page 54: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/54

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

Page 55: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/55

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);

Page 56: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/56

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());}

1. ___________

2. ___________

3. ___________

4. ___________

5. ___________

6. ___________

7. ___________

8. ___________

9. ___________

10. ___________

Page 57: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/57

Teszt 11.

Az ábrán egy JDBC lekérdezés vázlata látható!

Adja meg a hiányzó kifejezéseket!

1. _______________

2. _______________

3. _______________

Page 58: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/58

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.

Page 59: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/59

Teszt 13.

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

Igaz vagy hamis?

A PreparedStatement a Statement leszármazottja..

Az állítás igaz.

Az állítás hamis

Page 60: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/60

Teszt 14.

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

Melyik állítás helyes a JDBC-vel kapcsolatban?

Page 61: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/61

Teszt 15.

Az ábrán egy JDBC lekérdezés vázlata látható!

Adja meg a hiányzó kifejezéseket!

1. _______________

2. _______________

3. _______________

Page 62: 10. Ea: JDBC - users.iit.uni-miskolc.huszucs/jprog/oa/17_EA_09_JDBC_TM.pdf · A Java objektum-orientált, az adatbázisok többnyire még nem azok. Az adatbázis eléréséhez szükséges

B IT MAN62/62

VÉGEVÉGE