Adatbázis Rendszerek II. 1. SQL programozási felületek
B IT M A N
39/1
v: 2016.02.10 B IT 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 M A N
Megoldás Testre szabott alkalmazói program készítése
Kliens
39/3
Adatbázis szerver
B IT M A N
Az alkalmazói program feladatai Kliens oldal
Szerver oldal
Parancs, művelet Parancs fogadás Parancs végrehajtás
Eredmények
39/4
Eredmény elküldése
B IT M A N
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 M A N
API felületek (Alkalmazásprogramozási interfész) Beágyazott SQL CLI, ODBC JDBC
4GL
39/6
B IT M A N
Beágyazott SQL SQL parancsok gazdanyelvi környezetbe ágyazva Gazdanyelv: Pascal, C, Java, … SQL Gazdanyelv + utasítások
Alkalmazás = forráskódja
Megoldanadó problémák:
– – – – – – 39/7
Kapcsolódás az adatbázis szerverhez SQL parancs felismerése Értékek átadása Eredménytábla feldolgozása Hibakezelés Típuskonverzió
B IT M A N
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 M A N
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 M A N
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 M A N
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 M A N
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;
39/12
Kurzor deklarálása
Megnyitás Kiolvasás Lezárás
B IT M A N
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; 39/13
Kurzor deklarálása
Megnyitás Kiolvasás Lezárás
B IT M A N
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 M A N
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 M A N
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 M A N
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 M A N
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 Eljárások Gazdanyelv + Függvények =
39/18
CLI felület
B IT M A N
Példa PHP nyelven B IT M A N
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 M A N
ODBC technológia Oracle
ODBC driver
SQL Server DB2 MySQL
Alkalmazás
Driver ODBC menedzser driver
Informix Berkley SyBase
ODBC driver
Access Excel TXT
39/21
B IT M A N
Az ODBC programozás lépései Kapcsolódás
Lekérdezés
Eredmények feldolgozása
Lekapcsolódás
39/22
B IT M A N
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 M A N
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 M A N
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
Az értékek átadása programváltozóknak
Kurzor deklarálása
Megnyitás Kiolvasás
Lekapcsolódás
39/25
Lezárás
B IT M A N
Az ODBC programozás lépései
Kapcsolódás
Lekérdezés Eredményhalmaz lezárása
39/26
Eredmények feldolgozása
SQL kérés lezárása
Lekapcsolódás
Kapcsolat lezárása
B IT M A N
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ó) 5.
6. 7. 8. 9.
létrhozása SQL parancs megadása Programváltozók segítségével a parancs paraméterezése Parancs végrehajtása Eredmény feldolgozása: értékek átadása programváltozóba Statement, kapcsolat lezárása
39/27
B IT M A N
JDBC (Java Database Connectivity) OOLI (Object Oriented Level Interface) Java nyelven íródott interfész, ODBC elvek betartása, annak továbbfejlesztése
JAVA Alkalmazás
Oracle driver
Oracle
Driver MySQL menedzser driver
MySQL
jdbc/odbc driver 39/28
ODBC driver
B IT M A N
A JDBC programozás lépései Kapcsolódás
Lekérdezés
Eredmények feldolgozása
Lekapcsolódás
39/29
B IT M A N
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 M A N
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 M A N
A JDBC programozás lépései
Kapcsolódás
Lekérdezés
Eredmények feldolgozása
Rekordonként bejárjuk a ResultSet-et
Az értékeket átadjuk JAVA változóknak
Kurzor deklarálása
Megnyitás Kiolvasás
Lekapcsolódás
39/32
Lezárás
B IT M A N
A JDBC programozás lépései
Kapcsolódás
Lekérdezés ResultSet lezárása Eredmények feldolgozása
Lekapcsolódás
39/33
Statement lezárása
Kapcsolat lezárása
B IT M A N
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ó) 5.
6. 7. 8. 9.
létrhozása SQL parancs megadása Programváltozók segítségével a parancs paraméterezése Parancs végrehajtása Eredmény feldolgozása: értékek átadása programváltozóba ResultSet, Statement, kapcsolat lezárása
39/34
B IT M A N
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 M A N
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 M A N
39/37
B IT M A N
39/38
B IT M A N
VÉGE 39/39
B IT M A N