1 Fejlett Programozási Technikák 2. 15/7. Fejlett Programozási Technológiák 2. 2 Az előző előadás tartalma: JFC és Swing  Múlt  Felépítés  Java Bean.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Számítógépes adatbázis-kezelés
4. alkalom – Hálózat Kezelés

2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
II. Grafikus felhasználói interfész
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
Erőállóképesség mérése Találjanak teszteket az irodalomban
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Utófeszített vasbeton lemez statikai számítása Részletes számítás
JavaScript.
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
A tételek eljuttatása az iskolákba
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
Programrendszerek Fejlesztése 7/47/4 1. Az előző előadás tartalma: 2  XPath  XSLT  XSD.
1 Fejlett Programozási Technikák 2. 15/9. Fejlett Programozási Technológiák 2. 2 Az előző mai előadás tartalma: Számítógépes biztonság Jáva és a biztonság.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Fejlett Programozási Technológiák II. Világos Zsolt 1. gyakorlat.
Fejlett Programozási Technológiák II. Világos Zsolt 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10. Adatkezelés JPA-Hibernate Dr. Bilicki Vilmos Szegedi.
Ember László XUBUNTU Linux (ami majdnem UBUNTU) Ötödik nekifutás 192 MB RAM és 3 GB HDD erőforrásokkal.
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
Készítette: Sárközi Anikó
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
A Java programozási nyelvSoós Sándor 1/20 Java programozási nyelv 11. rész – Adatbázis-programozás Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
Java – adatbázisok elérése
szakmérnök hallgatók számára
Logikai szita Izsó Tímea 9.B.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
Java programozási nyelv Filekezelés
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Java programozási nyelv Adatbekérés konzolról
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
Adatbázis-kezelés Tarcsi Ádám január. 15. MySQL és PHP.
Objektum orientált programozás
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
Számítógépes adatbázis-kezelés
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
1 Az igazság ideát van? Montskó Éva, mtv. 2 Célcsoport Az alábbi célcsoportokra vonatkozóan mutatjuk be az adatokat: 4-12 évesek,1.
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
Java web programozás 5..
Programozás III JPA.
Miskolci Egyetem Alkalmazott Informatikai Tanszék 2007
JDBC.
Alkalmazásfejlesztés gyakorlat
Fejlett Programozási Technikák 2.
Adatbázis használat a webszervernél
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Fejlett Programozási Technikák 2.
Előadás másolata:

1 Fejlett Programozási Technikák 2. 15/7

Fejlett Programozási Technológiák 2. 2 Az előző előadás tartalma: JFC és Swing  Múlt  Felépítés  Java Bean  Felső szintű konténerek  Középső szintű konténerek  Elemek  Eseménykezelés  Rajzolás

Fejlett Programozási Technológiák 2. 3 A mai előadás tartalma: Java Applet  Felépítése  Tulajdonságai  Paraméterátadás JDBC  Típusai  Kapcsolat típusok  Statement objektumok  RecordSet  Tranzakciók

Fejlett Programozási Technológiák 2. 4 Források:

Fejlett Programozási Technológiák 2. 5 Java Applet Kliens oldalon fut Beágyazható a HTML-be Az APPLET elemmel lehet beágyazni Akkor célszerű használni, ha nincs egyszerűbb megoldás (titkosítás, táblázat, nyomtatás) Korlátozottabb mint a Java alkalmazás

Fejlett Programozási Technológiák 2. 6 Nem garantált, hogy a másik oldalon van Java <OBJECT classid = "clsid:CAFEEFAC ABCDEFFEDCBA" codebase = " WIDTH = 100 HEIGHT = 50 > <EMBED type = "application/x-java-applet;jpi-version=1.4.1" CODE = Applet1 WIDTH = 100 HEIGHT = 50 scriptable = false pluginspage = " <!-- --> HTMLconverter

Fejlett Programozási Technológiák 2. 7 Alapok Az Applet osztályból származtatandó amennyiben AWT elemeket szeretnénk használni A JApplet osztályból származtatandó amennyiben Swing elemeket is szeretnénk használni

Fejlett Programozási Technológiák 2. 8 Példa import javax.swing.*; import java.awt.*; public class HelloWorld extends JApplet { JLabel label; String szoveg; public void start() { szoveg = szoveg + " - " + "Start"; label.setText(szoveg); } public void stop() { szoveg = szoveg + " - " + "Stop"; label.setText(szoveg); } public void destroy() { szoveg = szoveg + " - " + "Destroy"; label.setText(szoveg); } public void init() { szoveg = new String("Init"); label = new JLabel(szoveg); label.setHorizontalAlignment(JLabel.CENTER); label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black)); getContentPane().add(label, BorderLayout.CENTER); } Teszt <APPLET CODE="HelloWorld.class" WIDTH="150" HEIGHT="25">

Fejlett Programozási Technológiák 2. 9 Rajz példa import javax.swing.JApplet; import java.awt.Graphics; public class Rajz extends JApplet { public void paint(Graphics g) { g.drawLine(15,10,210,10); g.drawLine(15,30,210,30); g.drawString(”Szöveg”,25,25); }

Fejlett Programozási Technológiák Metódusok init - inicializálja az appletet minden újraindítás, újratöltés után start – az applet inicializálása után fut le, amikor egy oldalról elmegyünk és visszatérünk akkor csak ez és a stop metódus fut le stop – az applet leállítása esetén fut le destroy - az applet újraindítása valamint kilépés esetén fut le paint – AWT használata esetén érdekes, segítségével viszonylag egyszerűen rajzolhatunk

Fejlett Programozási Technológiák Az appletek korlátai a biztonságos működés érdekében a következő korlátok léteznek:  nem definiálhatunk natív metódusokat  a futtató gépen nem írhat, olvashat fájlokat  nem hozhat létre hálózati kapcsolatokat (a szervert kivéve)  nem futtathat programokat a kliensen  nem olvashatja a rendszer tulajdonságok egy részét  a megjelenő ablakokban figyelmeztet arra, hogy azok Java Applet ablakok digitálisan aláírt appletekre a fentiek nem feltétlenül vonatkoznak (policy fájl) ( s/Security/Signed/)

Fejlett Programozási Technológiák Amit Applettel meg lehet valósítani szinte minden Swing és AWT elem használható a szerverrel hálózati kapcsolatot tud kiépíteni az azonos oldalon lévő appletek publikus metódusait meghívhatjuk (böngésző függő) a helyi erőforrásról betöltött appletek nem rendelkeznek a hálózatról letöltött appletek korlátaival

Fejlett Programozási Technológiák Appletek létrehozása Forras.java javac Forras.java a legtöbb böngésző az oldal frissítésével nem frissíti az appleteket (shift, ctrl + refresh) végső megoldás: kiüríteni a böngésző gyorstárát, kilépni a böngészőből, belépni a böngészőbe érdemes appletviewer-t használni a tesztelésre appletviewer forras.html figyeljünk arra, hogy a helyi elérési útvonal ne tartalmazzon szóközöket

Fejlett Programozási Technológiák Applet desktop alkalmazás import javax.swing.*; import java.awt.*; public class Applet1c extends JApplet { public void init() { getContentPane().add(new JLabel("Applet!")); } public static void main(String[] args) { JApplet applet = new Applet1c(); JFrame frame = new JFrame("Applet1c"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(100,50); applet.init(); applet.start(); frame.setVisible(true); }

Fejlett Programozási Technológiák Appletek használata A showStatus(); metódussal írhatunk a státusz sorba másik applet metódushívás public class Sender extends Applet implements ActionListener {.. receiver = getAppletContext().getApplet(receiverName); ((Receiver)receiver).processRequestFrom(myName); }... public class Receiver extends Applet { public void processRequestFrom(String senderName) { label.setText("Received message from " + senderName + "!"); repaint(); }  Enumeration e = getAppletContext().getApplets();  Applet applet = (Applet)e.nextElement();

Fejlett Programozási Technológiák Paraméterek String nev = getParameter("nev")

Fejlett Programozási Technológiák Szálak sok böngésző az appleteket külön szálakban futtatja gyakran külön szál csoportban Párhuzamos feladatok végrehajtására szálakat használhatunk Runnable interfészt kell megvalósítani

Fejlett Programozási Technológiák Kommunikáció a szerverrel HTML (PARAM) java.net (servlet listerner) RMI CORBA JDBC

Fejlett Programozási Technológiák SQL, ODBC SQL (Sturctured Query Language)  adatbázis, tábla, sor, oszlop  relációs adatbázis  lekérdezés  módosító lekérdezés  nézet ODBC (Open Database Connectivity)  X/Open SQL CLI  C nyelven alapuló interfész  egységes felületet biztosít az adatbázisokhoz  a gyártók saját meghajtókat írnak  PC szabvány (csaknem ipari szabvány)

Fejlett Programozási Technológiák JDBC A Java platform legfontosabb összetevője Platform és szállító független Egy egyszerű Java API a programozók számára JDBC meghajtó menedzser Gyártó specifikus meghajtók mellyel az egyes gyártók optimalizálhatják a kapcsolatot Hasonló megoldás mint a Microsoft igen sikeres ODBC megoldása (C nyelv) Az adatok titkosítása az szállító meghajtó feladata

Fejlett Programozási Technológiák JDBC JDBC 1.0  SQL 92  egyszerű hívásszintű interfész JDBC 2.0  sokkal összetettebb funkciók, alkalmazásszerverek  connection pooling  distributed transaction JDBC 3.0  SQL 99

Fejlett Programozási Technológiák JDBC meghajtók JDBC-ODBC bridge plus ODBC driver  JDBC-t ODBC-re alakítja  az ODBC meghajtó kommunikál az adatbázissal  JDBC/ODBC bridge  nem támogatja a JDBC2-t  az ODBC-t kell beállítanunk  nem ajánlott a haszálata Native-API partly-Java driver  a meghajtó részben Java nyelven részben más nyelven íródott  platform specifikus JDBC-Net pure Java driver  egyszerű Java kliens könyvtár mely adatbázis független hálózati protokollon keresztül kommunikál egy szerver komponenssel mely ezt továbbítja az adatbázisnak Native-protocol pure Java driver  egyszerű Java könyvtár mely közvetlenül az adatbázissal kommunikál

Fejlett Programozási Technológiák Miért nem ODBC Bonyolult Kevés utasítás, bonyolult szintaxis C specifikus, Pointer függő Kevésbé biztonságos, nehezebben telepíthető mint a JDBC

Fejlett Programozási Technológiák Használata Használható  Java alkalmazásokban  Applet-ekben csak a szerverrel tud kapcsolatot létesíteni  Három, vagy több rétegű alkalmazásokban Kliens Középső réteg (Servlet, EJBean) Adatbázis Szever JDBC http, RMI, …

Fejlett Programozási Technológiák Three-tier Model

Fejlett Programozási Technológiák JDBC installálása PostgreSQL  pgjdbc2.jar ->…\lib\ext  postmaster –i  pg_hba.conf CLASSPATH windows:  setup_faq.jsp

Fejlett Programozási Technológiák JDBC kapcsolat felépítés I. Meghajtó betöltése:  try { Class.forName("org.postgresql.Driver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }  java -Djdbc.drivers=org.postgresql.Driver Teszt Adatbázis címzése:  jdbc: :  jdbc:odbc://teszt.com:5000;UID=scott;PWD=tiger  jdbc:postgresql:// /teszt

Fejlett Programozási Technológiák JDBC kapcsolat felépítés II. Kapcsolat objektum:  Connection con;  con = DriverManager.getConnection(url, "Rendszergazda", ”x"); Kifejezés:  Statement stmt;  stmt = con.createStatement();  stmt.close(); con.close(); kilépéskor le kell zárnunk minden kapcsolatot !! (a szemétgyűjtő nem tudja megtenni helyettünk a statemenet-et igen)

Fejlett Programozási Technológiák Példa: import java.sql.*; public class Teszt { public static void main(String args[]) { String url = "jdbc:postgresql:// /teszt"; Connection con; String createString; createString = "create table Teszt1 (COF_NAME VARCHAR(32), " + "SUP_ID INTEGER, PRICE FLOAT, SALES INTEGER, " + "TOTAL INTEGER)"; Statement stmt; try {Class.forName("org.postgresql.Driver");} catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage());} try { con = DriverManager.getConnection(url, "Rendszergazda", "Alert"); stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage());} }

Fejlett Programozási Technológiák JDBC kapcsolat felépítés III. Connection Pooling  ConnectionPoolDataSource interfész 1:X kapcsolat fizikai kapcsolatok helyett logikai kapcsolatok a kliens nem érzékel semmit Alkalmazás szerver biztosítja ezt a funkciót (Tomcat is)

Fejlett Programozási Technológiák Példa com.acme.jdbc.ConnectionPoolDS cpds = new com.acme.jdbc.ConnectionPoolDS(); cpds.setServerName(“bookserver”); cpds.setDatabaseName(“booklist”); cpds.setPortNumber(9040); cpds.setDescription(“Connection pooling for bookserver”); Context ctx = new InitialContext(); ctx.bind(“jdbc/pool/bookserver_pool”, cpds); com.acme.appserver.PooledDataSource ds = new com.acme.appserver.PooledDataSource(); ds.setDescription(“Datasource with connection pooling”); ds.setDataSourceName(“jdbc/pool/bookserver_pool”); Context ctx = new InitialContext(); ctx.bind(“jdbc/bookserver”, ds); Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(" jdbc/bookserver"); Connection con = ds.getConnection("user", "pwd");

Fejlett Programozási Technológiák JDBC objektumok

Fejlett Programozási Technológiák Connection Egy kapcsolatot jelent az adatbázissal Egy alkalmazásnak egy-vagy több kapcsolat objektuma lehet, egy-vagy több adatbázissal Connection.getMetaData  DatabaseMetaData, információ az adatbázisról DriverManager.getConnection(URL)  a DriverManager megpróbál egy megfelelő meghajtót keresni az URL-ben szereplő adatbázishoz DataSource ds.getConnection("user", "pwd");

Fejlett Programozási Technológiák Metadata DatabaseMetaData dbmd = con.getMetaData(); kb. 150 metódust használhatunk a legtöbb resultset objektumot ad vissza sok metódus bonyolult névvel rendelkezik, célszerű olyan metódusokat használni melyek ezeket megadják

Fejlett Programozási Technológiák Metadata – Általános információk getURL getUserName getDatabaseProductVersion, getDriverMajorVersion and getDriverMinorVersion getSchemaTerm, getCatalogTerm and getProcedureTerm nullsAreSortedHigh and nullsAreSortedLow usesLocalFiles and usesLocalFilePerTable getSQLKeywords

Fejlett Programozási Technológiák Metadata-Lehetőségek supportsAlterTableWithDropColumn supportsBatchUpdates supportsTableCorrelationNames supportsPositionedDelete supportsFullOuterJoins supportsStoredProcedures supportsMixedCaseQuotedIdentifiers supportsANSI92EntryLevelSQL supportsCoreSQLGrammar

Fejlett Programozási Technológiák Metadata - korlátok getMaxRowSize getMaxStatementLength getMaxTablesInSelect getMaxConnections getMaxCharLiteralLength getMaxColumnsInTable

Fejlett Programozási Technológiák Statement paraméter nélküli kifejezések egyszerű SQL kifejezések létrehozására használandó executeQuery (  egyszerű lekérdezés Select * from t executeUpdate  INSERT  UPDATE  DELETE  CREATE TABLE  DROP TABLE  a visszatérési értéke egy integer mely az érintett sorok számát adja meg egyébként 0 execute  olyan esetekben használják amikor több mint egy válasz érkezik Connection con = DriverManager.getConnection(url, "sunny", ""); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");

Fejlett Programozási Technológiák Példa: Execute Statement stmt = conn.createStatement(); boolean b = stmt.execute(sql); if (b == true) { // b is true if a ResultSet is returned ResultSet rs; rs = stmt.getResultSet(); while (rs.next()) {... } } else { // b is false if an update count is returned int rows = stmt.getUpdateCount(); if (rows > 0) {... }

Fejlett Programozási Technológiák Automatikusan Generált Kulcsok Statement.RETURN_GENERATEDKEYS getGeneratedKeys(); Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate("INSERT INTO ORDERS " + "(ISBN, CUSTOMERID) " + "VALUES ( , ’BILLG’)", Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); boolean b = rs.next(); if (b == true) { // retrieve the new key value... }

Fejlett Programozási Technológiák Prepared Statement a Statement alosztálya előre fordított SQL kifejezések egy-vagy több paramétere lehet (IN) több metódust használhatunk az IN paraméterek beállítására sokkal hatékonyabb lehet mint a Statement objektum (előre fordított) gyakran használt kifejezések létrehozására használandó többször futtatható, a beállított paraméterek megmaradnak

Fejlett Programozási Technológiák Példa Connection con = DriverManager.getConnection( "jdbc:my_subprotocol:my_subname"); con.setTransactionIsolation(TRANSACTION_READ_COMMITTED); PreparedStatement pstmt = con.prepareStatement( "SELECT EMP_NO, SALARY FROM EMPLOYEES WHERE EMP_NO = ?", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); pstmt.setFetchSize(25); pstmt.setString(1, " "); ResultSet rs3 = pstmt.executeQuery(); pstmt.setString(1, "Hi"); for (int i = 0; i < 10; i++) { pstmt.setInt(2, i); int rowCount = pstmt.executeUpdate(); } setNull

Fejlett Programozási Technológiák Statement pooling

Fejlett Programozási Technológiák Callable Statement segítségével SQL tárolt eljárásokat futathatunk supportsStoredProcedures() getProcedures() {? = call procedure_name[(?, ?,...)]} IN paraméterek OUT paraméterek  regisztrálni kell  nincs külön lehetőség nagy adatok kezelésére INOUT paraméterek

Fejlett Programozási Technológiák Példa IN CallableStatement cstmt = con.prepareCall( "{call updatePrices(?, ?)}"); cstmt.setString(1, "Colombian"); cstmt.setFloat(2, 8.49f); cstmt.addBatch(); cstmt.setString(1, "Colombian_Decaf"); cstmt.setFloat(2, 9.49f); cstmt.addBatch(); int [] updateCounts = cstmt.executeBatch();

Fejlett Programozási Technológiák Példa OUT CallableStatement cstmt = con.prepareCall( "{call getTestData(?, ?)}"); cstmt.registerOutParameter(1, java.sql.Types.TINYINT); cstmt.registerOutParameter(2, java.sql.Types.DECIMAL); ResultSet rs = cstmt.executeQuery(); //... byte x = cstmt.getByte(1); java.math.BigDecimal n = cstmt.getBigDecimal(2);

Fejlett Programozási Technológiák Példa INOUT CallableStatement cstmt = con.prepareCall("{call reviseTotal(?)}"); cstmt.setByte(1, (byte)25); cstmt.registerOutParameter(1, java.sql.Types.TINYINT); cstmt.executeUpdate(); byte x = cstmt.getByte(1);

Fejlett Programozási Technológiák Result Set Az előző három objektum eredménye Alapesetben nem írható és nem görgethető (csak egyszer lehet rajta végigmenni) A JDBC 2.0 API ezeket lehetővé teszi Nem minden meghajtó képes erre (pl.: postgresql) getXXX(név vagy sorszám) metódusok (select a, select * ) getMetaData updateRow(), insertRow(), deleteRow(), refreshRow() JDBC 2.0  previous  first  last  absolute  relative  afterLast  beforeFirst

Fejlett Programozási Technológiák Meta Data: ResultSet rs = stmt.executeQuery(sqlString); ResultSetMetaData rsmd = rs.getMetaData(); int colType [] = new int[rsmd.getColumnCount()]; for (int idx = 0, int col = 1; idx < colType.length; idx++, col++) colType[idx] = rsmd.getColumnType(col);

Fejlett Programozási Technológiák Result set (JDBC 3.0) Kurzor:  TYPE_FORWARD_ONLY  TYPE_SCROLL_INSENSITIVE  TYPE_SCROLL_SENSITIVE Párhuzamosság  CONCUR_READ_ONLY  CONCUR_UPDATABLE Tarthatóság:  HOLD_CURSORS_OVER_COMMIT  CLOSE_CURSORS_OVER_COMMIT Használata: Connection conn = ds.getConnection(user, passwd); Statement stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT); ResultSet rs = stmt.executeQuery(“select author, title, isbn from booklist”);

Fejlett Programozási Technológiák Result set updateXXX CONCUR_UPDATABLE SQL parancsok nélül módosíthatjuk a rekordokat akkor működnek ha :  van elsődleges kulcs  a lekérdezés nem tartalmaz JOIN ill. GROUP BY kifejezést int n = rs.getInt(3); // n=5... rs.updateInt(3, 88); int n = rs.getInt(3); // n = 88 rs.absolute(4); rs.updateString(2, "321 Kasten"); rs.updateFloat(3, f); rs.updateRow();

Fejlett Programozási Technológiák Result set insert, delete rs.first(); rs.deleteRow(); rs.moveToInsertRow(); rs.updateObject(1, myArray); rs.updateInt(2, 3857); rs.updateString(3, "Mysteries"); rs.insertRow(); rs.first();

Fejlett Programozási Technológiák Példa java.sql.Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int i = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); System.out.println("ROW = " + i + " " + s + " " + f); }

Fejlett Programozási Technológiák Példa rs.beforeFirst(); while (rs.next()) { System.out.println(rs.getString("EMP_NO") + " " + rs.getFloat("SALARY"); } rs.afterLast(); while (rs.previous()) { System.out.println(rs.getString("EMP_NO") + " " + rs.getFloat("SALARY"); } ResultSet rs = stmt.executeQuery( "SELECT LAST_NAME, FIRST_NAME FROM EMPLOYEES"); rs.last(); int numberOfRows = rs.getRow(); System.out.println("XYZ, Inc. has " + numberOfRows + " employees"); rs.beforeFirst(); while (next()) {... }

Fejlett Programozási Technológiák Tranzakciók bankbetét átutalás  A helyen csökken  B helyen növekszik egy tranzakció egy vagy több kifejezést tartalmaz melyek csak együtt hajtódnak végre (egyébként visszaállítja az eredeti állapotot - rollback) a kapcsolat objektum auto-commit módban van azaz minden egyes kifejezést külön külön hajt végre ha ez le van tiltva akkor a tranzakció addig nem ér véget amíg a commit vagy rollback metódusokat meg nem hívják a tranzakció kezdete az auto-commit mód letiltásával kezdődik a JDBC 2.0 API segítségével elosztott tranzakciókat is végrehajthatunk JDBC 3.0 SavePoint

Fejlett Programozási Technológiák A tranzakciók elkülönítése piszkos olvasás (dirty read)  a tranzakció írásai a commit esemény előtt is olvashatóak  azaz valaki olvashatja azt az adatot amit esetleg később visszavonnak (rollback)  a többi tranzakció nem konzisztens adatok alapján működhet megismételhetetlen olvasás (nonrepeatable read)  A tranzakció olvas egy sort  B tranzakció megváltoztatja  A tranzakció újra olvassa ugyanazt a megváltozott sort fantom olvasás (phantom read)  A tranzakció olvassa az összes sort amely a WHERE feltételben van  B tranzakció beilleszt egy sort amely ugyanennek a feltételnek fele meg  A tranzakció újraértékeli a kifejezést és beveszi a fantom sort is

Fejlett Programozási Technológiák A tranzakciók elkülönítési szintjei 5 szint:  TRANSACTION_NONE nincs tranzakció kezelés  TRANSACTION_READ_UNCOMMITTED a nem végleges módosítások láthatóak (dirty read, …)  TRANSACTION_READ_COMMITTED csak a végleges adatok olvashatóak (nincs dirty read, de van másik kettő)  TRANSACTION_REPEATABLE_READ a másik tranzakció nem is írhatja az A tranzakció által érintett sorokat (phantom még lehet)  TRANSACTION_SERIALIZABLE minden problémát kiküszöböl con.setTransactionIsolation(TRANSACTION_READ_UNCOMM ITTED); magasabb elkülönítés lassabb működés (sok zárolás, egymásra várnak …) a fentiek természetesen adatbázis-kezelő függőek (MySQL – gyenge tranzakció kezelés)

Fejlett Programozási Technológiák con.setAutoCommit( false ); bError = false; try { for(... ) { if( bError ) { break; } stmt.executeUpdate(... ); } if( bError ) { con.rollback(); } else { con.commit(); } } / catch ( SQLException SQLe) { con.rollback();... } // end catch catch ( Exception e) { con.rollback();... } // end catch

Fejlett Programozási Technológiák Tranzakciók: SavePoint DatabaseMetaData.supportsSavepoints Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) VALUES " + "(’FIRST’)"); // set savepoint Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1"); rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) " + "VALUES (’SECOND’)");... conn.rollback(svpt1);... conn.commit(); Connection.releaseSavepoint

Fejlett Programozási Technológiák Elosztott tranzakciók Tranzakció kezelő (JTA) JDBC meghajtó:  XADataSource  XAConnection  XAResource Alkalmazás szerver

Fejlett Programozási Technológiák XADataSource, XAConnection javax.sql XAConnection -> PooledConnection: public interface XAConnection extends PooledConnection { javax.transaction.xa.XAResource getXAResource() throws SQLException; } XADataSource: public interface XADataSource { XAConnection getXAConnection() throws SQLException; XAConnection getXAConnection(String user, String password) throws SQLException;...

Fejlett Programozási Technológiák Példa Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(“jdbc/inventory”); Connection con = ds.getConnection(“myID”,“mypasswd”); // Assume xads is a driver’s implementation of XADataSource XADataSource xads = (XADataSource)ctx.lookup(“jdbc/xa/" + "inventory_xa”); // xacon implements XAConnection XAConnection xacon = xads.getXAConnection(“myID”, “mypasswd”); // Get a logical connection to pass back up to the application Connection con = xacon.getConnection();

Fejlett Programozási Technológiák XAResource JTA - X/Open Group XA interface XAConnection.getXAResource – egy tranzakció lehet Az alkalmazás szerver ezt adja át a tranzakció menedzsernek Two phase commit Fontosabb metódusok (xid):  start  end  prepare  commit  rollback

Fejlett Programozási Technológiák Példa javax.transaction.xa.XAResource resourceA = XAConA.getXAResource(); javax.transaction.xa.XAResource resourceB = XAConB.getXAResource(); … resourceA.start(xid, javax.transaction.xa.TMNOFLAGS); resourceA.end(xid, javax.transaction.xa.TMSUCCESS); resourceB.start(xid, javax.transaction.xa.TMNOFLAGS); resourceB.end(xid, javax.transaction.xa.TMSUCCESS); … resourceA.prepare(xid); resourceB.prepare(xid); … resourceA.commit(xid, false); resourceB.commit(xid, false); … resourceA.rollback(xid); resourceB.rollback(xid);

Fejlett Programozási Technológiák Nagy adatmennyiség JDBC 3.0 SQL 3  getXXX, setXXX Array BLOB (Binary Large Object) CLOB (Character Large Object)  getCharacterStream JDBC 1.0  LONGVARBINARY  LONGVARCHAR getBinaryStream getAsciiStream getUnicodeStream locator

Fejlett Programozási Technológiák Példa java.sql.Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT x FROM Table2"); // Now retrieve the column 1 results in 4 K chunks: byte [] buff = new byte[4096]; while (rs.next()) { Clob cdata = rs. getCLOB(1); java.io.InputStream fin = cdata.getAsciiStream(); for (;;) { int size = fin.read(buff); if (size == -1) { break; } output.write(buff, 0, size); }

Fejlett Programozási Technológiák NULL érték típustól függően kezeli  null - karakterekre  0 - számokra  false - boolean int n = rs.getInt(3); boolean b = rs.wasNull();

Fejlett Programozási Technológiák Kötegelt utasítások növeli a teljesítményt addBatch() // turn off autocommit con.setAutoCommit(false); Statement stmt = con.createStatement(); stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')"); stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')"); stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)"); // submit a batch of update commands for execution int[] updateCounts = stmt.executeBatch();

Fejlett Programozási Technológiák Függvények használata getNumericFunctions() getStringFunctions() getSystemFunctions() getTimeDateFunctions() supportsConvert() getXXXFunctions() UPDATE myTable SET circularVal = squared * { fn PI() }...

Fejlett Programozási Technológiák A mai előadás tartalma: Java Applet  Felépítése  Tulajdonságai  Paraméterátadás JDBC  Típusai  Kapcsolat típusok  Statement objektumok  RecordSet  Tranzakciók

Fejlett Programozási Technológiák A következő előadás tartalma: Számítógépes biztonság Jáva és a biztonság  Biztonsági architektúra Titkosító architektúra  JCE  JAAS  JSSE  GSSE