Dr. Pál László, Sapientia EMTE, Csíkszereda
JAVA PROGRAMOZÁS 8.ELŐADÁS
2014-2015 tavasz
Véletlen elérésű állományok; JDBC
2
Véletlen elérésű állományok
A RandomAccessFile osztály 3
Közvetlen hozzáférésű állomány Írható és olvasható egyszerre Írás/olvasás egysége: bájt, primitív adat vagy String (tetszőleges objektum nem lehet!) Állománymutató (állománypozíció, file pointer) Értéke:
állomány elejétől számított bájtsorszám Lekérdezhető, beállítható Olvasó, író utasítások állítják
Osztályhierarchia 4
Példa 5
RandomAccessFile raf = new RandomAccessFile("adatok.dat","rw"); raf.writeChars("ElejeX1908Vege"); long hossz = raf.length(); // hossz==28 raf.seek(10); char ch = raf.readChar(); // ch=='X' raf.writeChar(ch); long poz = raf.getFilePointer(); // poz==14
A RandomAccessFile osztály 6
Konstruktorok RandomAccessFile(String
name, String mode) throws FileNotFoundException RandomAccessFile(File file, String mode) throws FileNotFoundException mode: "r" vagy "rw”
Metódusok long
getFilePointer() throws IOException void seek(long pos) throws IOException int skipBytes(int n) throws IOException long length() throws IOException void setLength(long newLength) throws IOException
A RandomAccessFile osztály 7
Metódusok: int
read() throws IOException, EOFException boolean readBoolean() throws IOException String readLine() throws IOException String readUTF() throws IOException void write(int b) throws IOException void writeBoolean(boolean v) throws IOException void writeBytes(String s) throws IOException void writeChars(String s) throws IOException void writeUTF(String s) throws IOException void close() throws IOException
Feladat - Hőmérsékletek 8
Feladat: Adatok
felvitele egy állományba Adatok ki listázása Átlag érték számítás Közbeeső érték kinyerése
Feladat - Hőmérsékletek 9
Adatok bevitele:
Feladat - Hőmérsékletek 10
Tetszőleges adat kinyerése:
Feladat - AddressBook 11
Feladat - AddressBook 12
Feladat - AddressBook 13
Feladat - AddressBook 14
Feladat - AddressBook 15
A Scanner osztály 16
Szöveges adatok bevitelére használt osztály A bevitt szöveget átalakítja primitív adatokra vagy String-re A szöveget felosztja részszövegekre (token) valamilyen minta alapján (alapértelmezetten: space, tab, enter) Átalakító függvények: nextXxx()
(nextInt(), nextByte(), nextFloat(), stb.) Next() – String beolvasása nextLine() – sor bevitele
A Scanner osztály 17
Konstruktorok: paraméterként megadható egy bájtalapú stream, egy fájl vagy egy sztring
A Scanner osztály 18
Példák: Standard
bemenet
keyboard Scanner in1 = new Scanner(System.in); int i = in1.nextInt(); Fájl-bemenet
Scanner in2 = new Scanner(new File("in.txt")); while (in2.hasNextDouble()) { double d = in.nextDouble();} Sztring
bemenet
Scanner in3 = new Scanner("This is the input text"); while (in3.hasNext()) { String s = in.next(); }
A Scanner osztály 19
leggyakrabban a standard bemenetről való beolvasásra használjuk Példa:
A Scanner osztály 20
leggyakrabban a standard bemenetről való beolvasásra használjuk Példa:
Elválasztók (Delimiters) 21
Az alap fehér karakterek helyett lehet más elválasztót is beállítani, minták (pattern) segítségével
Példa:
Elválasztók (Delimiters) 22
Példa (folytatás):
Kimenet:
Formázott kiíratás – printf() 23
A java.util.Formatter osztály 24
String.format() 25
26
Adatbáziskezelés Jávában
JDBC 27
JDBC (Java Database Connectivity): programozói interfész (API), amely segítségével SQL parancsokat küldhetünk az adatbázisoknak és az adatbázis válaszait (eredménytáblák, visszatérési értékek, hibakódok, tárolt eljárások output paraméterei) feldolgozhatjuk Az adatbázisok eléréséhez szükséges Java osztályok a java.sql csomagban találhatók
JDBC API szolgáltatásai 28
Adatbázisok használatához az alábbi műveletekre van szükség: Összeköttetés
(connection) létesítése az adatbázissal SQL utasítások végrehajtása (Select, Insert, Update, Delete, Call) Az adatbázis kezelő rendszer válaszainak feldolgozása (eredménytáblák, hibakódok, stb.)
JDBC meghajtó-programok 29
A JDBC meghajtóprogramok feladata a JDBC API és a konkrét adatbáziskezelő rendszer illesztése Többféle megvalósítása van: JDBC-ODBC
áthidaló program + ODBC meghajtó-
program JDBC – saját API áthidaló – meghajtó-program stb
MySQL JDBC meghajtó 30
Letöltés: http://dev.mysql.com/downloads ⇒ "MySQL Connectors" ⇒ "Connector/J" ⇒ Connector/J 5.1.{xx} ⇒ select "Platform Independent" ⇒ ZIP Archive (e.g., "mysql-connectorjava-5.1.{xx}.zip" Kicsomagolás A "mysql-connector-java-5.1.{xx}-bin.jar” fájl másolása a JAVA_HOME könyvtárba (pld. "c:\program files\java\jdk1.8.0_{xx}\jre\lib\ext")
JDBC architektúra 31
JDBC működési ciklusa 32
A meghajtó-programok kiválasztása 33
A meghajtóprogram kiválasztható: Megnevezéssel Automatikusan
a DriverManager osztály segítségével
A DriverManager osztály nyilvántartja a használható meghajtóprogramokat, és az adatbázis összeköttetés létesítésekor kiválasztja a megfelelő meghajtót.
A meghajtó-program betöltése 34
A meghajtó-program kiválasztható: Megnevezéssel Automatikusan
a DriverManager osztály segítségével
A DriverManager osztály nyilvántartja a használható meghajtó-programokat, és az adatbázis összeköttetés létesítésekor kiválasztja a megfelelő meghajtót.
35
A meghajtó-programok regisztrálása
Két módszerrel lehetséges: A
meghajtó-program osztályának közvetlen betöltésével (Cass.forName() statikus metósussal) A jdbc.drivers rendszerparaméter beállításával. A DriverManager osztály inicializálásakor a jdbc.drivers rendszerparaméterben tárolt osztályok automatikusan betöltődnek
Adatbázis URL-ek 36
Adatbázis-URL-ek szintaxisa a következő:
jdbc:alprotokoll:adatforrás, ahol a protokoll neve: jdbc az alprotokoll nevét a megfelelő meghajtó-program forgalmazója határozza meg, ezért rendszerint megegyezik a forgalmazó nevével az adatforrás leírása pedig a két adatbázis eléréséhez szükséges további adatokat (pl. adatbázis neve és a hálózat címe, a felhasználó neve és jelszava) tartalmazza
Példa: jdbc:oracle:thin:@site:port:database jdbc:odbc:datasource;odbcoptions jdbc:mysql://localhost/database
Adatbázis URL-ek 37
Az összeköttetés létrehozása Connection
DriverManager.getConnection(url, username,
password);
Az összeköttetés lezárása A
Connection objektum close() metódusával lehetséges
SQL utasítások végrehajtása 38
Az SQL utasításokat az alábbi interfészek segítségével lehet kezelni Statement:
egyszerű utasítások végrehajtása PreparedStatement: bemenő paraméterekkel rendelkező utasítások végrehajtása CallableStatement: be/kimenő paraméterekkel rendelkező tárolt eljárások végrehajtása
Példa 39
Példa 40
Könyvészet 41
Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.