© Kozsik Tamás 2000-2006 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.

Slides:



Advertisements
Hasonló előadás
Tananyag: konzultáció
Advertisements

Adatbázis gyakorlat 1. Szerző: Varga Zsuzsanna ELTE-IK (2004) Budapest
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 8. gyakorlat SQL alapok.
Elmaradás.  0 Számjegy. Ebben a pozícióban egyetlen számjegyet kell megadnia.  9 Számjegy. Ebben a pozícióban egyetlen számjegyet lehet megadni, nem.
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 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Delphi programozás alapjai
SQL Structured Query Language
Adatbázis kezelés. Hierarchikus modell Legrégebbi modell, ma már nem használatos. Az adatokat fákban tároljuk, ahol minden pont a szegmens adatokat, és.
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
Adatbázisok / SQL v 2.1 Viczián Gergely (eredeti: Török János 2004)
INSERT INTO Egy vagy több rekordot ad hozzá a táblához. Egyetlen rekordot hozzáfűző kifejezés: INSERT INTO cél_tábla (mező1,mező2,…) VALUES (érték1, érték2,
Triggerek II. ADATBÁZIS ALAPÚ RENDSZEREK.  Az Oracle kifinomult módon támogatja a sorszámozások generálását  Szekvencia: olyan adatbázis-objektum, amely.
SQL Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések
(MY)SQL MEGJEGYZÉSEK. MYISAM VS. INNODB  A MySQL-ben többféle tárolási motor is használatos: MyISAM, InnoDB  A régebbi verziókban a MyISAM alapértelmezett,
Fejlett Programozási Technológiák II. Világos Zsolt 7. gyakorlat.
Adatbázis rendszerek II.
Adatbázisok-SQL Dr. Viczián Gergely (Dr. Török János V2.0)
Készítette: Sárközi Anikó
az MSAccess programmal
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.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Adatbázis-kezelés Papp-Varga Zsuzsanna. Elérhetőségek    as.
Adatbázis kezelés SQL. Történeti áttekintés 1976IBM:SEQUEL,SQL 1976IBM:SEQUEL,SQL 1983ORACLE 1983ORACLE 1984INFORMIX 1984INFORMIX 1986SQL – szabvány :
Nézettáblák létrehozása, módosítása és törlése
SQL, Relációs adatmodell
1 Informatikai Szakképzési Portál Adatbázis kezelés DML – Adat manipuláló nyelv.
SQL. SQL = Structured Query Language (= struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus.
Az SQL nyelv alapjai.
Objektumorientált adatbázisok és szabványok Ispány Márton.
Nézettáblák, felső-N analízis Március 20. Rózsa Győző.
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;
DDL – Adatdefiníciós nyelv
Lekérdezések Páll Boglárka A lekérdezés az adatbázisban szereplő adatok kinyerésének leghatékonyabb és legsokrétübb módja A lekérdezés tulajdonképpen.
Adatbázis adminisztrátori ismeretek
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.
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 a minimum elégséges érdemjegynek!
Adatbázis-kezelés SQL-lel. SQL SQL = Structured Query Language – Strukturált Lekérdezőnyelv Relációs adatbázis-kezelők lekérdezési nyelve. Alapjait az.
Adatbázis-kezelés SQL-lel
Felhasználók és jogosultságok
SQL DDL DATA DEFINITION LANGUAGE. Táblák létrehozása CREATE TABLE táblanév ( oszlopnév1 típus(méret) /DEFAULT érték/ /NOT NULL/, oszlopnév2 típus(méret)
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
SQL.
Adatbázis kezelés.
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Ma az un. Relációs adatmodelleket használjuk.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
SQL történelem 1970 Edgar F. Codd (IBM) cikke 12 szabály a relációs adatmodellekre 1979 első kereskedelmi forgalmazású relációs adatbáziskezelő 1986 az.
Adatbázis rendszerek I
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Adatbázis-kezelés 1-2. adatbázis-kezelő rendszer 1.új adatbázisokat hozhassanak (adat definició 2.lekérdezések és módosítások (adat manipuláció) 3.Támogassa.
Programozás III JPA.
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Triggerek gyakorlás.
Alkalmazásfejlesztés gyakorlat
Adatbázisok SQL.
Logisztikai projekt - gyakorlat Adatbázis-elmélet
MySQL története, részei, felhasználhatóság, PHPMyAdmin
Előadás másolata:

© 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 •Alapelv: platform-függetlenség, ebbe beletartozik az adatbáziskezelőktől való függetlenség is •Megoldás: JDBC

© Kozsik Tamás JDBC •Valami interfész, amit a Java programok és az adatbáziskezelők közé lehet rakni •Ne kelljen olyan kódot írni, amely egy picit is egy konkrét ABkezelő rendszertől függ •Egy művelethalmaz, amit a Java programozók használhatnak •Funkcionalitás, amit az adatbáziskezelő készítőjének meg kell valósítania –JDBC-compliant •Szerződés-modell

© Kozsik Tamás JDBC: Java Data Base Connectivity •Adatbáziskezelő készítője: csinálnia kell egy meghajtó-programot (driver), amellyel az adatbáziskezelő kielégíti a JDBC specifikációt •Java programozó: a java.sql és a javax.sql csomagokban található osztályok, interfészek segítségével dolgozik, és a programhoz csatolja a használt adatbáziskezelő JDBC- meghajtóprogramját

© Kozsik Tamás Relációs adatbáziskezelés - áttekintés •Az adatok fizikai ábrázolása mellékes (remélhetőleg hatékony) •Logikailag az adatok relációkként jelennek meg •A relációk tábláknak felelnek meg •A reláció elemei a tábla sorai •A reláció típusát az oszlopok határozzák meg •A relációkon műveletek végezhetők (pl. join) •Kitüntetett projekciók: kulcsok

© Kozsik Tamás Példa: bróker cég •Ügyfelek tábla Azon. Név Cím 1 John Lennon London, Abbey Road 1 2 Jim Morrison LA, Love Street 7 3 Presszer Gábor Bp, Miénkitta tér 3 •Részvények tábla Név Ár FORTE 190 TVK 120

© Kozsik Tamás Adatmanipuláció: SQL •Structured Query Language, IBM •Elterjedt, burjánzó, de szabványosították (ISO-ANSI, 1988) •A JDBC az ANSI SQL-2 szabványt követi •Lekérdezések, adatfelvitel, törlés, módosítás adatbázis-adminisztráció

© Kozsik Tamás Példák •select * from Ügyfelek •select Név from Részvények where Ár < 150 •insert into Részvények (Név, Ár) values ('MOL',111) •update Részvények set Ár=121 where Név='MOL' •delete from Részvények where Név='MOL' •create table Tulajdonok (Azonosító int, Mennyiség int) •drop table Tulajdonok

© Kozsik Tamás Mini SQL: mSQL •Nagyon egyszerű adatbáziskezelő (Hughes) •Nem mindent tud, amit az SQL szerint kéne •Kis adatbázisokhoz hatékony, kis erőforrás- igényű •Van hozzá: terminál program, relációséma nézegető, C-nyelvi API, JDBC meghajtó •Kliens/szerver támogatása TCP/IP-n keresztül

© Kozsik Tamás Használat •Indítsuk el az adatbázis motort. Ehhez az msql2d programot kell futtatni. •relshow A séma nézegető: milyen adatbázisok vannak •relshow StockMarket Milyen táblák vannak benne •relshow StockMarket Customer egy tábla definíciójának megtekintése •msql StockMarket belépés a terminál programba, AB megnyitása

© Kozsik Tamás Az msql program •Írjunk be SQL parancsokat •A végére \g kell, ez zárja le a parancsot (a parancs lehet több soros is) •Segítség: \h •Kilépés: \q •Fájlból parancsok: msql StockMarket <input.txt

© Kozsik Tamás Elérés TCP/IP-n keresztül msql -hostname gépnév adatbázis msql -h gépnév adatbázis msql -h localhost StockMarket relshow -h localhost StockMarket Stock Az adatbázis elérhető a 1112 TCP porton keresztül (alapértelmezés szerint)

© Kozsik Tamás Adatbáziskezelés Java programból •JDBC nélkül: AB-kezelőtől függő kód, API- hívások JNI-n keresztül (Java Native Interface) •JDBC-vel: kód, mely független az AB- kezelőtől. Bármikor le lehet cserélni... •Az adatmanipulációs nyelv továbbra is az SQL •Nem beágyazott, az SQL parancsok sztringekben vannak –A fordító nem ellenőrzi, futás közben derül ki minden hiba... :-(

© Kozsik Tamás mSQL és Java •Az msql-jdbc-1-0.jar fájlban van a meghajtóprogram •Ezt a jar fájlt is használjuk a fordításkor és a futtatáskor -classpath msql-jdbc-1-0.jar:. •Mi van benne? Egy csomó osztály, ami megvalósít fontos interfészeket –Driver, Connection, Statement, ResultSet, stb. –Pl. a com.imaginary.sql.msql.MsqlDriver osztályt valahogy a JVM tudomására kell hozni, mondjuk példányosítani

© Kozsik Tamás import java.sql.*; class DBTeszt { public static void main(String args[]) throws SQLException { new com.imaginary.sql.msql.MsqlDriver(); Connection c = DriverManager.getConnection ("jdbc:msql://localhost:1112/StockMarket"); Statement s = c.createStatement(); ResultSet rs = s.executeQuery ("select * from Stock"); while( rs.next() ){ System.out.println(rs.getString(1)); } rs.close(); s.close(); c.close(); }

© Kozsik Tamás Az adatbáziskezelés menete •Amikor a JVM betölti a Driver interfészt megvalósító osztályt, akkor az beregisztrálja magát a DriverManager-nél •A DriverManager-től kérhetünk egy Connection-t •A Connection-től egy Statement-et •A Statement-tel végrehajthatunk egy SQL utasítást. Lekérdezés eredménye egy ResultSet •A ResultSet-et bejárhatjuk soronként Ezeket a kékeket mind megvalósítja a meghajtóprg.

© Kozsik Tamás A JDBC meghajtók •Egy Java program több adatbáziskezelőt is használhat •Mindegyikhez kell a megfelelő meghajtóprg. •A DriverManager tartja nyilván a meghajtókat •Kiválasztja a megfelelőt: Connection c = DriverManager.getConnection ("jdbc:msql://localhost:1112/StockMarket"); •A programozó dolga csak az, hogy a JVM-mel betöltesse a Driver-t implementáló osztályt, mert az automatikusan beregisztrálja magát a DriverManager-nél (egy statikus inicializátorral)

© Kozsik Tamás A meghajtó betöltése •Példány létrehozása new com.imaginary.sql.msql.MsqlDriver(); •forName metódussal try{ Class.forName ("com.imaginary.sql.msql.MsqlDriver"); } catch (ClassNotFoundException exc){} •.class attribútummal Class cl = com.imaginary.sql.msql.MsqlDriver.class; •jdbc.drivers jellemző beállítása Hogy a kód semmi adatbáziskezelő-specifikus részt ne tartalmazzon...

© Kozsik Tamás jdbc.drivers import java.sql.*; class DBTeszt { public static void main(String args[]) throws SQLException { Connection c = DriverManager.getConnection(args[0]);... } javac DBTeszt.java java -classpath msql-jdbc-1-0.jar:. -Djdbc.drivers=com.imaginary.sql.msql.MsqlDriver DBTeszt jdbc:msql://localhost:1112/StockMarket •Több meghajtó is betölthető (Windows ; és UNIX : elv.)

© Kozsik Tamás Különböző adatbáziskezelők •Egy programban több adatbázis is használható, akár több adatbáziskezelőn keresztül is •Az áttérés egyik adatbáziskezelőről egy másikra viszonylag egyszerű •Főleg, ha az SQL utasításokban megmaradunk a szabványos lehetőségeknél •Nagyon sokféle adatbáziskezelőhöz készítettek már JDBC meghajtó programot (lásd Java honlap) •Van egy JDBC-ODBC kapcsoló meghajtó, amivel minden olyan AB-kezelő használható, amihez van ODBC (Open Data Base Connectivity) interfész

© Kozsik Tamás Connection létrehozása str = "jdbc:msql://localhost:1112/StockMarket"; Connection c = DriverManager.getConnection(str); jdbc: alprotokoll : alnév Például. jdbc.odbc.Object.StockMarket •A paraméterként átadott sztringet végigkérdezi a regisztrált meghajtóktól. Az elsőt, amelyik tud vele mit kezdeni (alprotokoll), megbízza a munkával •Kiválasztási sorrend: először a jdbc.drivers, utána az explicit betöltött osztályok

© Kozsik Tamás Statement •SQL utasítások végrehajtására Statement s = c.createStatement(); •Vannak lekérdezések és adatmanipulációk •Lekérdezés ResultSet rs = s.executeQuery ("select * from Stock"); •Adatmanipuláció int sorok = s.executeUpdate ("insert into Stock values ('ABC',90)"); •Több eredményt adó SQL utasítás végrehajtása: boolean vanEredmény = s.execute("...");

© Kozsik Tamás ResultSet •Eredménytábla, lekérdezés eredménye ResultSet rs = s.executeQuery ("select * from Stock"); •A sorait egymás után feldolgozhatjuk while( rs.next() ){... } •Kezdetben a kurzor az első sor elé mutat •Az aktuális sor komponenseit kiszedhetjük String s = rs.getString(1)); •Egy Statement-hez egyszerre csak egy ResultSet lehet megnyitva

© Kozsik Tamás Eredménysorok feldolgozása •Az aktuális sorból az oszlopok (komponensek) kiszedhetők a getXXX metódusokkal String getString(int oszlop) int getInt(int oszlop) •Az oszlopok 1-től számozódnak •Lehet az oszlop száma helyett a nevét megadni –kevésbbé hatékony •Az oszlopokat balról jobbra kell végigolvasni, és csak egyszer

© Kozsik Tamás ResultSet a JDBC 2.0 szerint •Az eredménytábla kurzorát előre is lehet mozgatni, lehet benne pozícionálni •Lehet módosítani az eredménytáblát, és rajta keresztül az adatbázist •Be lehet pl. állítani, hogy más SQL utasítások hatása ne jelenjen meg a feldolgozás alatt álló eredménytáblában Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );

© Kozsik Tamás Pozícionálás és sor módosítása rs.absolute(5); rs.updateString("Név", "Janis Joplin"); rs.updateRow(); •Szkrollozható és módosítható ResultSet •JDBC 2.0 kell hozzá •Az updateXXX metódusok szabályai ugyanazok, mint a getXXX metódusokéi

© Kozsik Tamás Sor beszúrása és törlése rs.moveToInsertRow(); rs.updateString(1,"Sting"); rs.updateInt(2,35); rs.updateBoolean(3,true); rs.insertRow(); rs.moveToCurrentRow(); rs.deleteRow();

© Kozsik Tamás Java típusok és JDBC típusok •getString, getInt,... BIT, TINYINT, SHORTINT, INT, LONGINT •java.math.BigDecimal - NUMERIC •getASCIIStream - LONGVARCHAR •getBinaryStream - LONGVARBINARY, getCharacterStream •java.sql.Blob, java.sql.Clob •java.sql.Date, Time, Timestamp

© Kozsik Tamás PreparedStatement •Ha egy SQL utasítást többször is végre akarunk hajtani •Előfordított SQL utasítás –Ha a meghajtó támogatja az előfordítást •Hatékonyabb, mint többször egy Statement-et •Paraméterezhető –setXXX metódusok –A paraméter típusának megfelelő setXXX kell •A Statement leszármazottja

© Kozsik Tamás Példa Alkalmazott[] beosztottak =... PreparedStatement s = c.prepareStatement( "insert into Alkalmazott" + "(Név, Fizetés, Id) values (?,?,?)" ); for(int i=0; i<beosztottak.length; i++){ s.setString(1, beosztottak[i].getNév()); s.setInt(2, beosztottak[i].getFizetés()); s.setInt(3, 100*i) s.executeUpdate(); }

© Kozsik Tamás Callable Statement •Nem-SQL utasítások, pl. tárolt eljárások végrehajtására •JDBC eljáráshívási escape-szekvencia {call [,,...]} {?= call [,...]} •Lehetnek bemeneti és kimeneti paraméterei –És vegyes... –A kimenetiek típusát regisztráni kell végrehajtás előtt •A visszaadott eredményeeket (pl. ResultSet) előbb kell feldolgozni, mint a kimeneti paramétereket •PreparedStatement leszármazottja

© Kozsik Tamás CallableStatement s = c.prepareCall ( "{call return_seats[?, ?, ?]}" ); s.setString(1, "MA-723"); s.registerOutParameter (2, java.sql.Types.BOOLEAN); s.registerOutParameter (3, java.sql.Types.INTEGER); s.execute(); // eredmények feldolgozása, ha vannak boolean dohányzó = s.getBoolean(2); int szabadHelyek = s.getInt(3);

© Kozsik Tamás boolean tábla = s.execute("..."); int sorok = s.getUpdateCount(); while ( tábla || (sorok != -1) ){ if(tábla){ ResultSet rs = s.getResultSet(); // csinálunk rs-sel valamit } else { // csinálunk sorok-kal valamit } tábla = s.getMoreResults(); sorok = s.getUpdateCount(); } Statement.execute()

© Kozsik Tamás javax.sql - szabványos kiterjesztés •JNDI - logikai név az adatbázisok eléréséhez –függetlenség az adatbázis nevétől és pontos elérési útvonalától •Adatbázis-kapcsolatok cache-elése –a kapcsolat felépítése nagyon időigényes •JTA - Java Transaction API használata –kétfázisú protokoll tranzakciókezeléshez •Adattáblák kezelése off-line

© Kozsik Tamás Többrétegű (multi-tier) alkalmazások •Két rétegű modell: a felhasználói interfész az adatbázishoz kapcsolódik •Három rétegű modell: közbeiktatunk egy szerveroldali programot –a felhasználói felület a hálózaton kapcsolódik a szerverhez •HTML form (+szervlet), applet, program •HTTP, TCP - UDP, RMI, CORBA –a szerver az adatbázis(ok)kal tartja a kapcsolatot –biztonság, megbízhatóság, rugalmasság, könnyebb használat, konfigurálhatóság

© Kozsik Tamás Tranzakciók •Logikailag összetartozó adatbáziskezelő utasítások együtese •Hajtódjon végre az egész (vagy semmi) •Véglegesítés: commit, visszavonás: rollback •Konkurrens adatbáziskezelés esetén problémák: sorbarendezhetőség (serializability) –Hatásban legyen olyan, mintha valamilyen sorrendbben egymás után hajtódtak volna végre –Inkonzisztens adatok elkerülése –Holtpont-veszély!

© Kozsik Tamás Tranzakciók készítése •Alapértelmezett: automatikus nyugtázás –Minden SQL utasítás befejeződése után nyugtáz •Végrehajtódott, és nem ad vissza eredményt •Az utasítást tartalmazó SQL objektmot újra végrehajtjuk •Eredménytála utolsó sorát is feldolgoztuk •Az eredménytáblát lezárjuk •Manuális nyugtázási mód –setAutoCommit –A programozó hívja meg a commit és rollback metódusokat

© Kozsik Tamás Tranzakció izolációs szintek •A kapcsolathoz rendelhetjük (Connection) •setTransactionIsolation –TRANSSACTION_NONE: nincs tranz. kez. –_READ_UNCOMMITED: olvasáskor mindig az aktuális értéket látjuk –_READ_COMMITED: olvasáskor mindig a legutóbbi véglegesített eredményt látjuk –_REPEATABLE_READ: a tranzakció által olvasott értékek megegyeznek a kezdeti értékkel –_SERIALIZABLE: a tranzakció ideje alatt az olvasott értékeket más tranzakciók nem írhatják felül

© Kozsik Tamás Hibakezelés •SQLException –getMessage() –SQLstate (X/OPEN SQLstate szabvány szerint) –Hibakód (adatbáziskezelő-specifikus kód) –Hivatkozás a következő hibára (kiegészítések) •SQLWarning –Automatikusn lekezelik a JDBC metódusok –Az SQL-objektumokhoz láncolva, listában –getWarnings(), clearWarnings()

© Kozsik Tamás DatabaseMetaData •Az adatbázis jellemzői •getMetaData() •SQL fogalmak adatbázisspecikifus megvalósításai, annak korlátai –getCatalogSeparator(), getIdentifierQuoteString(), getMaxConnections(), getMaxColumnsInTable() •Az adatbáziskezelő tudása –supportsFullJoins(), supportsResultSetConcurrency() –JDBC COMPLIANT •supportsColumnAliasing(), supportsSubqueriesInExists()...

© Kozsik Tamás Kötegelt (batch) végrehajtás •Gyorsabb adatmanipulációs/definíciós utasítások int[] sorok; Statement s = c.createStatement(); s.addBatch("insert into Nevek" + "values ('Lennon', 'McCartney')"); s.addBatch("insert into Nevek" + "values ('Szőrényi', 'Bródy')"); sorok = s.executeBatch();