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
4 Osztályhierarchia
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) mode: "r" vagy "rw Metódusok throws FileNotFoundException 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:
11 Feladat - AddressBook
12 Feladat - AddressBook
13 Feladat - AddressBook
14 Feladat - AddressBook
15 Feladat - AddressBook
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:
23 Formázott kiíratás printf()
24 A java.util.formatter osztály
25 String.format()
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-connector- java-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")
31 JDBC architektúra
32 JDBC működési ciklusa
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 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 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ó-programok 35 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
39 Példa
40 Példa
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.