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

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

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

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

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

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

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

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

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


Java Programozás 2. Gy: EmpProgram. Grafikus felületű adatkezelő program

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

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

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

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

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

Adatbázisok webalkalmazásokban

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

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

Java Programozás 11. Ea: MVC modell

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

Adatbázis Rendszerek II. 7. Oracle JDBC

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

Java és web programozás

Java és web programozás

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

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

Java Programozás 3. Gy: Java GUI. Swing, AWT

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

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

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

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Programozási technológia

JAVA PROGRAMOZÁS 8.ELŐADÁS

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

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

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

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

Java Database Connectivity (JDBC)

Swing GUI készítése NetBeans IDE segítségével

MDAC - Microsoft Data Access Components

Vizuális programozás gyakorlat

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

PHP-MySQL. Adatbázisok gyakorlat

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

JavaServer Pages (JSP) (folytatás)

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

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

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

és az instanceof operátor

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

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

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

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.

Entity Framework alapú adatbáziselérés

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

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

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

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

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:

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

Programozási technológia

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

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

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

Kliens oldali SQL-API

Adatbázis-kezelés ODBC driverrel

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

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Database Systems II. ZH összefoglaló

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

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

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Segédanyag: Java alkalmazások gyakorlat

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

Programozási technológia

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

Access adatbázis elérése OLE DB-n keresztül

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

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:

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

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Szoftvertechnolo gia gyakorlat

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

3. Osztályok II. Programozás II

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

ANDROID ALKALMAZÁSFEJLESZTÉS

OOP: Java 8.Gy: Gyakorlás

JDBC. A JDBC alkalmazása

Az SQL*Plus használata

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

A Java nyelv. Dialógus ablakok. Elek Tibor

BaBér. Bérügyviteli rendszer. Telepítési segédlet 2014.

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?

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió

Adatbázisok* tulajdonságai

Szoftvertechnológia alapjai Java előadások

Adatbázis kezelés Delphiben. SQL lekérdezések

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Java programozási nyelv 6. rész Java a gyakorlatban

Kalmár György Adatbázis alapú rendszerek

Átírás:

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

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: 104/2 Mozilla Firefox Adobe Reader, Acrobat, Photoshop Airbus Apple Facebook Microsoft Google PHP

SQLite Jellemzők: 104/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: 104/4

SQLite JDBC driver letöltése: 104/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! A mappa tartalma: Lépjünk be a Java munkakönyvtárunkba, és csomagoljuk ki oda a jdbc drivert. Kész! 104/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 104/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! 104/8

SQLite Tábla létrehozása 104/9 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); 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! 104/10

104/11

A cél: Javás kliensről manipulálni az adatbázist. 104/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. 104/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. 104/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. 104/15

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

A megoldás (2.) Háromrétegű megoldás Kliens-oldal Szerver-oldal Alkalmazás DB SQL Driver Piros, Kék, Zöld 104/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 104/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 104/19

JDBC osztályok/interfészek DriverManager getconnection preparestatement Connection extends Statement PreparedStatement extends Class Interface CallableStatement executequery setxxx DataType 104/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 104/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.27.2.1.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 104/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! 104/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.) 104/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 104/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 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 104/26

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 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. 104/27 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 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. 104/28

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. 104/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. 104/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 104/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 104/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 104/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); 104/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 104/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) { 104/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 104/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. 104/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!"); 104/39 catch (SQLException e) {System.out.println(e.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. 104/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()); 104/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) { 104/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; 104/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(): 104/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 104/45 ResultSet

104/46

Eclipse megoldás grafikus felületen 1. Projekt létrehozása: File\New\Java project Neve: sqliteprb 2. Kezdő panel létrehozása: New\Swing\JFrame Neve: ABKezeloPrg 3. Panelen az elrendezés menedzser kikapcsolása: 1. Jobb klikk a panel közepére\set layout\absolute layout 4. Nyomógomb felrakása: Components\JButton Variable: btnreg text: Driver regisztráció Eseménykezelő hozzáadása a gombhoz: dupla kattintás a gombra 104/47

A driver regisztráció kódja btnreg.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { Reg(); ); public void Reg(){ try { Class.forName("org.sqlite.JDBC"); SMD("Sikeres driver regisztráció!"); catch (ClassNotFoundException e) { SMD("Hibás driver regisztráció!"+e.getmessage()); public void SMD(String msg){ JOptionPane.showMessageDialog(null, msg, "ABKezelő Üzenet", 2); Ha szükséges: Jobb klikk a fel nem ismert elemre\source\organize Imports 104/48

A driver betöltése a projektbe 1. A fájlrendszerben fogjuk meg egérrel a jdbc drivert, és húzzuk rá a projekt nevére (sqliteprb), engedjük el 2. A megjelenő panelen válasszuk a Copy Files opciót 3. Jobb klikk a bemásolt driver nevére\build Path\Add to Build Path Ezzel adtuk hozzá a projekt keresési útvonalához a fizikai jdbc drivert. 4. Indítsuk el a projektet, Regisztráljunk! 104/49

Új adatsor beszúrása az adatbázisba 1. Panel létrehozása: New\Swing\JDialog Neve: NewEmp A Generate JDialog with OK and Cancel buttons opciót kapcsoljuk ki! 2. Panelen az elrendezés menedzser kikapcsolása: Jobb klikk a panel közepére\set layout\absolute layout 3. Feliratok (JLabel) és szövegmezők (JTextField) felrakása A feliratok változóneve lényegtelen A szövegmezők változóneve rendre: kod, nev, szid, lak, iq 4. Készítsük el e Beszúr (btnbeszur) gombot, aztán adjunk hozzá eseménykezelőt. 104/50

A beszúráshoz szükséges metódusok public void Connect() { try { String url = "jdbc:sqlite:c:/users/bitman/documents/sqlite3/empdb.db"; conn = DriverManager.getConnection(url); SMD("Connection OK!"); catch (SQLException e) { SMD("JDBC Connect: "+e.getmessage()); public void disconnect(){ try { conn.close(); catch (SQLException e) {SMD(e.getMessage()); 104/51

A beszúráshoz szükséges metódusok public void Insert(String kod, String nev, String szid, String lak, String iq) { String sqlp = "insert into emp values("+kod+", '"+nev+"', '"+szid+ "', '"+lak+"', "+iq+")"; try { s = conn.createstatement(); s.execute(sqlp); SMD("insert OK!"); catch (SQLException e) { SMD("JDBC insert: "+e.getmessage()); Szükséges változó deklaráció: private Statement s = null; private Connection conn=null; Munkát megkönnyítő metódus: public String RTF(JTextField jtf) { return jtf.gettext(); 104/52

A beszúrás kódja btnbeszur.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { Connect(); Insert(RTF(kod), RTF(nev), RTF(szid), RTF(lak), RTF(iq)); disconnect(); ); 104/53

A NewEmp panel beépítése a programba Most önállóan működőképes, mert van benne main metódus Töröljük ki a teljes main metódust! Az ABKezeloPrg panelre tegyünk egy Új adatsor (btnujadat) gombot Adjunk a gombhoz eseménykezelőt, melynek kódja: btnujadat.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { NewEmp ne = new NewEmp(); ne.setvisible(true); ); 104/54

Lista panel kialakítás tábla modell létrehozása A táblázat kezelése egy táblamodellel kezdődik. A modellben lehet megadni az egyes mezők típusát és szerkeszthetőségét. A DefaultTableModel leszármaztatásával jön létre, konstruktorában kapja meg a mezőneveket, és az oszlopok számát. Programlogika: 1. Egy modellt használnánk csak a programban az egyszerűség miatt 2. A módosításnál és a törlésnél ki kell jelölni egy rekordot, így szükséges egy jelölhető (logikai típusú) mező a sor elejére 3. A mezők típusa rendre: logikai, egész, szöveg, szöveg, szöveg, egész 3. Csak a legelső (logikai) mezőnek kell szerkeszthetőnek lennie (a kijelölhetőség miatt!) 104/55

Lista panel kialakítás tábla modell létrehozása File \ New \ Class - Neve legyen: EmpTM 104/56

Lista panel kialakítás tábla modell létrehozása import javax.swing.table.defaulttablemodel; public class EmpTM extends DefaultTableModel { public EmpTM (Object fildnames[], int rows){ super(fildnames, rows); 104/57 Zöld: kötelező rész, minden táblamodellben egyforma! Konstruktor: megkapja a mezők nevét és a sorok számát. public boolean iscelleditable(int row, int col) { if (col == 0) {return true; return false; Szerkeszthetőség: a 0. oszlop minden sora szerkeszthető, a többi cella nem! public Class<?> getcolumnclass(int index){ if (index == 0) return(boolean.class); else if (index==1 index==5) return(integer.class); return(string.class); Oszlopok típusa: a 0. oszlop logikai, az 1. és az 5. egész, a többi szöveges!

Listázás 1. Panel létrehozása: New\Swing\JDialog Neve: EmpList A Generate JDialog with OK and Cancel buttons opciót kapcsoljuk ki! 2. Panelen az elrendezés menedzser kikapcsolása: Jobb klikk a panel közepére\set layout\absolute layout 3. Készítsük el e Bezár (btnbezar) gombot, aztán adjunk hozzá eseménykezelőt. 4. Adjunk egy JTable-t a panelhez: 104/58

Lista panel kialakítás a panel létrehozása Adjunk a JTable-höz egy JScrollPane-t (görgetősávok) 1 3 2 104/59

Lista panel kialakítás a panel létrehozása Futtassuk a kódot, nézzük meg a panelt! 104/60

Lista panel kialakítás a panel létrehozása Kódbűvölés következik! Az osztály elejére: private EmpTM etm; A JTable kódjába: A kódból töröljük a main függvényt! table = new JTable(etm); A táblázatban az etm modell fog megjelenni Nem lesz önállóan futtatható a panel, ezért nem kell bele a main függvény! 104/61

Lista panel kialakítás a panel létrehozása Alakítsuk át a konstruktor elejét: public EmpList(JFrame f, EmpTM betm) { super(f, "Dolgozók listája", true); etm = betm; Tulajdonos, ablak címe, modális jelző A konstruktor kódjának végére írjuk be a következőket: Modális ablak lesz, melyet be kell zárni ahhoz, hogy az alatta lévő ablak újra aktív legyen! TableColumn tc = null; for (int i = 0; i < 6; i++) { tc = table.getcolumnmodel().getcolumn(i); if (i==0 i==1 i==5) tc.setpreferredwidth(30); else {tc.setpreferredwidth(100); 104/62 30 30 100 100 100 30 Oszlopszélesség megadása: a teljes szélességet felosztja az itt megadott értékek arányában!

Lista panel kialakítás a panel létrehozása A konstruktor kódjának végére írjuk be a következőket: table.setautocreaterowsorter(true); AutoSorter bekapcsolása TableRowSorter<EmpTM> trs = (TableRowSorter<EmpTM>)table.getRowSorter(); trs.setsortable(0, false); A 0. oszlop rendezhetőségének letiltása 104/63

Lista panel kialakítás a panel bezárása Kattintsunk duplán a Bezár gombon Dizájn nézetben, így az Eklipsz hozzáad egy eseménykezelőt a gombhoz, és megnyitja a kódot! Írjuk be a Bezár gomb kódját: JButton btnbezar = new JButton("Bez\u00E1r"); btnnewbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { dispose(); setvisible(false); ); dispose(): eltűnik a képernyőről a panel, de a referenciái megmaradnak. 104/64 setvisible(false): eltűnik a képernyőről a panel, de a referenciái megmaradnak. A két utasítás hatása ugyanaz, elég az egyiket használni!

A Lista panel megjelenítése (az ABKezeloPrg-ben) Készítsük el e Listázás (btnlista) gombot, aztán adjunk hozzá eseménykezelőt. Az osztály elejére: private EmpTM etm; A Lista gomb kódja: btnlista.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { EmpList el = new EmpList(ABKezeloPrg.this, etm); el.setvisible(true); Megjelenítés ); Példányosítás A konstruktor végére: Mezőnevek megadása Object emptmn[] = {"Jel","Kód","Név","Szülidő","Lakóhely","IQ"; etm = new EmpTM(emptmn, 0); etm példányosítása: mezőnevekkel, 0 darab sorral 104/65

A Lista panel kipróbálása (az EmpProgramban) 104/66

Listázás szükséges metódusok (az ABKezeloPrg-ben) Connect() disconnect() private Connection conn = null; private Statement s = null; private ResultSet rs = null; public void Lista() { String nev="", szid="", lak=""; int kod=0, iq=0; String sqlp= "select kod,nev,szulido,lakohely,iq 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"); etm.addrow(new Object[]{false, kod, nev, szid, lak, iq); rs.close(); catch (SQLException e) {SMD(e.getMessage()); 104/67

A Listázás gomb kódjának módosítása btnlista.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { for (int i = etm.getrowcount() - 1; i >= 0; i--) etm.removerow(i); Connect(); Lista(); disconnect(); EmpList el = new EmpList(ABKezeloPrg.this, etm); el.setvisible(true); ); 104/68

Adatmódosítás Ötlet: Ha rakunk a lista panelre egy Módosítás gombot, a kijelölt rekord módosítható. A módosítás paneljét a NewEmp panel alapján létrehozhatjuk: Másoljuk le az osztályt a Package Explorerben: Ctrl + C Ctrl + V Új név: ModEmp Egészítsük ki a panelt: Jobb klikk\open With\Window Builder Editor A kód mező értéke nem módosítható Az új mezők változóneve rendre: nev2, szid2, lak2, iq2 Az eredeti adatok mezői nem szerkeszthetők (editable: false) A gomb változóneve: btnmod 104/69

Kódbűvölés a ModEmp osztályban Az osztály elejére: public ModEmp(JDialog d, String bekod, String benev, String beszid, String belak, String beiq) { super(d, "Adatok módosítása", true); A bal oldali szövegmezők módosítása: kod = new JTextField(bekod);... nev = new JTextField(benev);... Egy újabb adatkiolvasó metódus a meglévő mellé: public String RTF2(JTextField jtf2, JTextField jtf) { if (jtf2.gettext().length()==0) return jtf.gettext(); else return jtf2.gettext(); 104/70

Kódbűvölés a ModEmp osztályban A módosítás metódusa: public void Update(String kod, String nev, String szid, String lak, String iq) { String sqlp = "update emp set nev='"+nev+"', szulido='"+szid+ "', lakohely='"+lak+"', iq="+iq+" where kod="+kod; try { s = conn.createstatement(); s.execute(sqlp); SMD("Update OK!"); catch (SQLException e) { SMD("JDBC Update: "+e.getmessage()); 104/71

Kódbűvölés a ModEmp osztályban A módosítás metódus meghívása (a Módosít gomb kódja): btnmod.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { Connect(); Update(RTF(kod), RTF2(nev2,nev), RTF2(szid2,szid), RTF2(lak2,lak), RTF2(iq2,iq)); disconnect(); ); 104/72

Kódbűvölés az EmpList osztályban Rakjuk fel a Módosítás (btnmod) gombot Egy indexekkel definiált elem értékét kiolvasó, visszaadó metódus: public String RTM(int row, int col) { return etm.getvalueat(row, col).tostring(); 104/73

Kódbűvölés az EmpList osztályban A módosítás logikája: 1. Ki kell jelölni egy sort a táblázatban 1. Ellenőrizni kellene, hogy csak 1 sor legyen kijelölve! 2. Meg kell határozni, melyik sor van kijelölve, ki kell olvasni az adatait, és továbbítani a ModEmp panel felé A Módosítás gomb kódja: btnmod.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { int jel=0, x=0; for(x = 0; x < etm.getrowcount(); x++) if ((Boolean)etm.getValueAt(x,0)) {jel=x; ModEmp me = new ModEmp(null, RTM(jel,1), RTM(jel,2), RTM(jel,3), RTM(jel,4), RTM(jel,5)); me.setvisible(true); ); 104/74

Teszt 104/75

Törlés A törlés logikája: 1. Ki kell jelölni egy sort a táblázatban 1. Ellenőrizni kellene, hogy csak 1 sor legyen kijelölve! 2. Meg kell határozni, melyik sor van kijelölve, ki kell olvasni a kódot belőle, és a kód alapján kitörölni az adatbázisból a rekordot. 3. Ezután frissíteni kell a táblázat adatait 1. Ki kell törölni belőle minden sort 2. Meg kell hívni a Lista metódust (előbb természetesen át kell másolni ide az ABKezeloPrg-ből) Rakjuk fel a Törlés (btntorol) gombot 104/76

Törlés A Törlés metódusa: public void Delete(String kod) { String sqlp = "delete from emp where kod="+kod; try { s = conn.createstatement(); s.execute(sqlp); SMD("Delete OK!"); catch (SQLException e) { SMD("JDBC Delete: "+e.getmessage()); 104/77

Törlés A Törlés gomb kódja: btntorol.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { int jel=0, x=0; for(x = 0; x < etm.getrowcount(); x++) if ((Boolean)etm.getValueAt(x,0)) {jel=x; Connect(); Delete(RTM(jel,1)); for (int i = etm.getrowcount() - 1; i >= 0; i--) etm.removerow(i); Lista(); disconnect(); ); A megfelelő működéshez természetesen szükséges a connect, a disconnect, a lista metódus, és néhány változó deklaráció is! 104/78

Új dolgozó (NewEmp) panel átalakítása Programlogika: 1. Legyen ez az ablak is modális. (most nem az!) 2. Legyen az ablaknak címe (fejléce, neve Új dolgozó felvitele) 3. A Beszúr gomb megnyomásakor a program ellenőrizze le: ki vannak-e töltve a mezők, (filledtf), a születési idő dátum-e, (gooddate) a kód és az iq mezőben egész szám van-e (goodint)! 104/79

Új dolgozó panel kódbűvölés A konstruktorba: public NewEmp(JFrame f) { super(f, "Új dolgozó felvitele", true); Az ABKezeloPrg-ben a hívó utasítás: NewEmp ne = new NewEmp(ABKezeloPrg.this); A filledtf metódus: public String RTF(JTextField jtf) { return jtf.gettext(); public boolean filledtf(jtextfield jtf) { String s = RTF(jtf); if (s.length() > 0) return true; else return false; 104/80

Új dolgozó panel kódbűvölés A gooddate metódus: public boolean gooddate(jtextfield jtf) { String s = RTF(jtf); Date testdate = null; try { testdate = sdf.parse(s); catch (ParseException e){return false; if (sdf.format(testdate).equals(s)) return true; else return false; Szükséges változó: private SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); Szükséges importok: import java.util.date; import java.text.simpledateformat; import java.text.parseexception; 104/81

Új dolgozó panel kódbűvölés A goodint metódus: public boolean goodint(jtextfield jtf) { String s = RTF(jtf); try { Integer.parseInt(s); return true; catch (NumberFormatException e){return false; 104/82

Új dolgozó panel kódbűvölés A btnbeszur gomb (Beszúrás) kódja: btnbeszur.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { if (!filledtf(kod)) SMD("A kód mező üres!"); else if (!goodint(kod)) SMD("A kód mezőben hibás számadat van!"); else if (!filledtf(nev)) SMD("A név mező üres!"); else if (!filledtf(szid)) SMD("A születési idő mező üres!"); else if (!gooddate(szid)) SMD("A születési idő mezőben hibás dátum van!"); else if (!filledtf(lak)) SMD("A lakóhely mező üres!"); else if (!filledtf(iq)) SMD("Az iq mező üres!"); else if (!goodint(iq)) SMD("Az iq mezőben hibás számadat van!"); else { Connect(); Insert(RTF(kod), RTF(nev), RTF(szid), RTF(lak), RTF(iq)); disconnect(); 104/83 );

Új dolgozó panel kódbűvölés Az adatbázis kezelő metódusok átszervezése egy külső osztályba: Oka: leegyszerűsíti, átláthatóbbá teszi a munkát és a kódot. Minden AB-kezelő metódus ide kerülhet, így elég 1 példányban megírni őket. Ezt az osztályt minden olyan osztályban példányosítani kell, ahol adatbázis kezelés van, és a példányon kell végrehajtani a műveleteket. File \ New \ Class - Neve legyen: ABManager 104/84

Az ABManager osztály kódja public class ABManager { private Connection conn = null; private Statement s = null; private ResultSet rs = null; public void Connect() { try { String url = "jdbc:sqlite:c:/users/bitman/documents/sqlite3/empdb.db"; conn = DriverManager.getConnection(url); SMD("Connection OK!"); catch (SQLException e) {SMD("JDBC Connect: "+e.getmessage()); public void disconnect(){ try { conn.close(); catch (SQLException e) {SMD(e.getMessage()); public void Insert(String kod, String nev, String szid, String lak, String iq) { String sqlp = "insert into emp values("+kod+", '"+nev+"', '"+szid+"', '"+lak+"', "+iq+")"; try { s = conn.createstatement(); s.execute(sqlp); SMD("insert OK!"); catch (SQLException e) {SMD("JDBC insert: "+e.getmessage()); public void SMD(String msg){ JOptionPane.showMessageDialog(null, msg, "ABKezelő Üzenet", 2); 104/85

Új dolgozó panel kódbűvölés Az ABManager osztály használata a NewEmp panelen: private ABManager abm = new ABManager(); btnbeszur.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { if (!filledtf(kod)) SMD("A kód mező üres!"); else if (!goodint(kod)) SMD("A kód mezőben hibás számadat van!"); else if (!filledtf(nev)) SMD("A név mező üres!"); else if (!filledtf(szid)) SMD("A születési idő mező üres!"); else if (!gooddate(szid)) SMD("A születési idő mezőben hibás dátum van!"); else if (!filledtf(lak)) SMD("A lakóhely mező üres!"); else if (!filledtf(iq)) SMD("Az iq mező üres!"); else if (!goodint(iq)) SMD("Az iq mezőben hibás számadat van!"); else { abm.connect(); abm.insert(rtf(kod), RTF(nev), RTF(szid), RTF(lak), RTF(iq)); abm.disconnect(); ); 104/86

104/87

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 104/88

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

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

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 ") 104/91

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 104/92

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()); 104/93 1. 2. 3. 4. 5. 1. void 2.!= null 3. close() 4. catch 5. ex

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

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 104/95

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); 104/96

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()); 104/97 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

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()); 104/98 public void Select(){ String sqlp= "select id, nev from melos"; String nev="", id=""; try { s = conn.createstatement(); s.executequery(sqlp); rs = s.getresultset(); while(rs.next()) { id = rs.getstring("id"); nev = rs.getstring("nev"); d.printf(id+"-"+nev); rs.close(); s.close(); conn.close(); catch(exception e) d.printf(e.getmessage());

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

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. 104/100

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 104/101

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 104/102

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

VÉGE VÉGE 104/104