Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN B IT v: 2016.02.10 MAN
SQL felületek Hatékony: SQL parancsok kiadására Eredmények megtekintésére Nehézkes: Nagyobb volumenű, rutintevékenységek esetén (minden paramétert meg kell adni) Nem alkalmas, ha több adatot akarunk bevinni felhasználó nem jártas az SQL nyelvben előzetes előszámításokra van szükség felhasználóbarát adatmegjelenítést kell megvalósítani a bevitelre kerül értékeket egy listából választjuk ki 39/2 B IT MAN
Megoldás Testre szabott alkalmazói program készítése Kliens Adatbázis szerver 39/3 B IT MAN
Az alkalmazói program feladatai Kliens oldal Szerver oldal Parancs, művelet Parancs fogadás Parancs végrehajtás Eredmények Eredmény elküldése 39/4 B IT MAN
Az alkalmazói program feladatai Kapcsolat felvétel: Paraméterei: host, port, adatbázis, felhasználónév, jelszó Utasítások elküldése: SQL utasítások formájában Lehet paraméteres is Eredmények fogadása: Nemcsak SELECT esetén van eredmény Kurzor kezelési mechanizmus Hibakezelés: Alkalmazás v. adatbázis rendszer hiba, kivételek 39/5 B IT MAN
API felületek (Alkalmazásprogramozási interfész) Beágyazott SQL CLI, ODBC JDBC 4GL 39/6 B IT MAN
Beágyazott SQL SQL parancsok gazdanyelvi környezetbe ágyazva Gazdanyelv: Pascal, C, Java, Gazdanyelv + SQL utasítások = Alkalmazás forráskódja Megoldanadó problémák: Kapcsolódás az adatbázis szerverhez SQL parancs felismerése Értékek átadása Eredménytábla feldolgozása Hibakezelés Típuskonverzió 39/7 B IT MAN
Példák C programnyelven SQL parancs felismerése EXEC SQL (parancs); Kapcsolódás adatbázishoz EXEC SQL CONNECT :felhasználónév IDENTIFIED BY :jelszó; Lekapcsolódás DISCONNECT; 39/8 B IT MAN
Példák C programnyelven Parancs küldése EXEC SQL INSERT INTO auto VALUES ( abc-123, Opel, piros,5,500000); Értékek átadása (gazdanyelvi változókkal) int a; a = 5; EXEC SQL INSERT INTO auto VALUES ( abc-123,, Opel, piros,:a,500000, 123456ab ); 39/9 B IT MAN
Példák C programnyelven Konkrét adatok fogadása (egy sornyi adat) Gazdanyelvi változókba kerülnek az értékek A v-listának illeszkednie kell az m-listára SELECT m-lista INTO v-lista FROM táblanév ; printf( Kérem a típust: ); scanf( %s,&tip); EXEC SQL SELECT count(*), max(ar) INTO :db, :maxar from auto where tipus = :tip; printf( db = %d, max ár = %d\n,db,maxar); 39/10 B IT MAN
Példák C programnyelven Rekordok fogadása (több sornyi adat) A SELECT parancs eredményét KURZOR segítségével tudjuk rekordonként feldolgozni Lépések: Kurzor deklarálása Megnyitás Kiolvasás Lezárás 39/11 B IT MAN
Példák C programnyelven EXEC SQL DECLARE c1 CURSOR FOR SELECT nev FROM ember WHERE kor > 20; EXEC SQL OPEN c1; C nyelven szervezett ciklusban a kiolvasás: EXEC SQL FETCH c1 INTO :y; EXEC SQL CLOSE c1; Kurzor deklarálása Megnyitás Kiolvasás Lezárás 39/12 B IT MAN
Példák C programnyelven EXEC SQL BEGIN DECLARE SECTION; char *r1; int a1; CURSOR c1 FOR SELECT rsz, ar FROM auto; EXEC SQL END DECLARE SECTION; EXEC SQL OPEN c1; while() { EXEC SQL FETCH c1 INTO :r1, :a1; printf( rsz=%s, ar=%d\n,r1,a1); } EXEC SQL CLOSE c1; Kurzor deklarálása Megnyitás Kiolvasás Lezárás 39/13 B IT MAN
Példák C programnyelven Hibakezelés Minden kiadott SQL utasítás után az adatbázisszerver visszajelzi a kliens programnak, hogy az utasítás sikeresen lefutott-e vagy valami hiba történt. A visszajelzés úgy történik, hogy a szerver a kliens program megfelelő változóinak ad értéket. A kliens programnak ezeket a változókat deklarálnia kell a következő utasítással: EXEC SQL INCLUDE SQLCA; 39/14 B IT MAN
Példák C programnyelven Az include sqlca hatására az SQL előfordító definiál a programban egy sqlca nevű, struktúra típusú C változót, amelynek a legfontosabb mezői a következők: SQLCA.sqlcode végrehajtási státusz Ha =0, sikeresen lefutott a parancs Ha <0, hiba történt, az érték a hibakód Ha >0, kivételes eset történt, pl. nincs a select-nek eredménye SQLCA.sqlerrm hiba szövege SQLCA.sqle - kb. 30 további metódus 39/15 B IT MAN
Példák C programnyelven EXEC SQL INCLUDE SQLCA; main() { EXEC SQL UPDATE dolgozo SET fizetes=0; if (sqlca.sqlcode < 0) { } } 39/16 B IT MAN
Példák C programnyelven Tranzakció kezelés BEGIN TRAN BEGIN TRY insert into nevek values ('abc'); insert into számok values (123); COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH END TRAN 39/17 B IT MAN
CLI (Call Level Interface) A gazdanyelv szintaktikájához idomul Eljárások, függvények hívása a gazdanyelvi környezetben SQL utasítás, mint aktuális paraméter Kapcsolat definiálása is függvénnyel Dinamikus SQL parancsok rugalmasabban kezelhetők Egyidejűleg több adatbázishoz is kapcsolódhat Nagyobb programozási előkészítést igényel Gazdanyelv + Eljárások Függvények = CLI felület 39/18 B IT MAN
Példa PHP nyelven <?php $con=mysql_connect("host","user","pswd"); if (!$con){ echo "Hibás MySQL kapcsolódás: ".mysql_error(); } $mdb = mysql_select_db("bolt",$con); $sql="insert INTO Kategória VALUES ('$_POST[ujkod]','$_POST[ujnev]')"; if (mysql_query($sql,$con)){ echo "Rekord hozzáadva!"; } else { echo "Gond van:".mysql_error(); } CloseCon(); 39/19?> B IT MAN
ODBC (Open Database Connectivity) Programozási nyelvtől független megoldás Microsoft technológia Az ODBC (Nyílt adatbázis kapcsolat) egy C nyelven alapuló interfészt ad, mely egységes felületet biztosít az adatbázisokhoz a következő területeken: Csatlakozás és bejelentkezés Adattípus és adatábrázolás Hibakódok SQL parancsok Minden adatbázishoz szükséges saját ODBC meghajtó 39/20 B IT MAN
ODBC technológia Oracle ODBC driver SQL Server DB2 MySQL Alkalmazás Driver menedzser ODBC driver Informix Berkley ODBC driver SyBase Access Excel TXT 39/21 B IT MAN
Az ODBC programozás lépései Kapcsolódás Lekérdezés Eredmények feldolgozása Lekapcsolódás 39/22 B IT MAN
Az ODBC programozás lépései Kapcsolódás Driver regisztrálása Lekérdezés Kapcsolódás a DBMS-hez Eredmények feldolgozása Lekapcsolódás 39/23 B IT MAN
Az ODBC programozás lépései Kapcsolódás Lekérdezés SQL kérés összeállítása Eredmények feldolgozása SQL kérés elküldése Lekapcsolódás 39/24 B IT MAN
Az ODBC programozás lépései Kapcsolódás Lekérdezés Az eredményhalmaz rekordonkénti bejárása Eredmények feldolgozása Lekapcsolódás Az értékek átadása programváltozóknak Kurzor deklarálása Megnyitás Kiolvasás Lezárás 39/25 B IT MAN
Az ODBC programozás lépései Kapcsolódás Lekérdezés Eredményhalmaz lezárása Eredmények feldolgozása SQL kérés lezárása Lekapcsolódás Kapcsolat lezárása 39/26 B IT MAN
Az ODBC programozás lépései 1. Függvénykönyvtárak betöltése 2. Driverek regisztrálása, betöltése 3. Adatbázis kapcsolat létrehozása (kapcsolat változó) 4. Statement (SQL parancs kiadására alkalmas változó) létrhozása 5. SQL parancs megadása 6. Programváltozók segítségével a parancs paraméterezése 7. Parancs végrehajtása 8. Eredmény feldolgozása: értékek átadása programváltozóba 9. Statement, kapcsolat lezárása 39/27 B IT MAN
JDBC (Java Database Connectivity) OOLI (Object Oriented Level Interface) Java nyelven íródott interfész, ODBC elvek betartása, annak továbbfejlesztése Oracle driver Oracle JAVA Alkalmazás Driver menedzser MySQL driver MySQL jdbc/odbc driver ODBC driver 39/28 B IT MAN
A JDBC programozás lépései Kapcsolódás Lekérdezés Eredmények feldolgozása Lekapcsolódás 39/29 B IT MAN
A JDBC programozás lépései Kapcsolódás Driver regisztrálása Lekérdezés Kapcsolódás a DBMS-hez Eredmények feldolgozása Lekapcsolódás 39/30 B IT MAN
A JDBC programozás lépései Kapcsolódás Lekérdezés Statement létrehozása Eredmények feldolgozása Statement végrehajtása Lekapcsolódás 39/31 B IT MAN
A JDBC programozás lépései Kapcsolódás Lekérdezés Rekordonként bejárjuk a ResultSet-et Eredmények feldolgozása Lekapcsolódás Az értékeket átadjuk JAVA változóknak Kurzor deklarálása Megnyitás Kiolvasás Lezárás 39/32 B IT MAN
A JDBC programozás lépései Kapcsolódás Lekérdezés ResultSet lezárása Eredmények feldolgozása Statement lezárása Lekapcsolódás Kapcsolat lezárása 39/33 B IT MAN
A JDBC programozás lépései 1. SQL osztály importálása 2. Driverek regisztrálása, betöltése 3. Adatbázis kapcsolat létrehozása (kapcsolat változó) 4. Statement (SQL parancs kiadására alkalmas változó) létrhozása 5. SQL parancs megadása 6. Programváltozók segítségével a parancs paraméterezése 7. Parancs végrehajtása 8. Eredmény feldolgozása: értékek átadása programváltozóba 9. ResultSet, Statement, kapcsolat lezárása 39/34 B IT MAN
4GL rendszerek 4GL = 4th Generation Language Nem programozási nyelv, hanem grafikus felülettel rendelkező integrált alkalmazásfejlesztő eszköz. A 4GL eszközök magas szintű programozási nyelvre épülő komplex, objektumorientált programfejlesztő rendszerek (komponens alapú fejlesztési módszert alkalmaznak). 39/35 B IT MAN
A 4GL rendszerek jellemzői Grafikus felhasználói felület Objektumorientáltság (kész objektumok) Eseményvezérelt programozás Gyors fejlesztés (komponens alapú): elég megadni a megjelenítési és eseménykezelési paramétereket; az implementációs részleteket elrejti. Szabványosság és rugalmasság Moduláris programfelépítés Csoportmunka-támogatás Segédprogramok széles választéka Futtatható állomány generálása 39/36 B IT MAN
39/37 B IT MAN
39/38 B IT MAN
VÉGE VÉGE 39/39 B IT MAN