Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés elemi eszközökkel. A MySQL adatbázis-kezelő

Hasonló dokumentumok
Eseményvezérelt alkalmazások fejlesztése I 7. előadás. Adatbázis-kezelés elemi eszközökkel. Giachetta Roberto

Elemi adatbázis kezelés

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés modell/nézet architektúrában

Elemi alkalmazások fejlesztése IV.

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa

Eseményvezérelt alkalmazások fejlesztése I 10. előadás. Adatbázis-kezelés modell/nézet architektúrában. Giachetta Roberto

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Egyetemi könyvtári nyilvántartó rendszer

Java programozási nyelv 11. rész Adatbázis-programozás

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

JAVA PROGRAMOZÁS 8.ELŐADÁS

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Egyetemi könyvtári nyilvántartó rendszer

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Elemi alkalmazások fejlesztése IV. Adatbáziskezelő alkalmazás készítése C++/Qt ben I.

Adatbázis-kezelés ODBC driverrel

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Adatbázis rendszerek 7. előadás State of the art

Adatbáziskezelés M/V architektúrában

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Adatbázisok webalkalmazásokban

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Adatbázis kezelés Delphiben. SQL lekérdezések

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Operációs rendszerek gyak.

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Választó lekérdezés létrehozása

A MOODLE KERETRENDSZER TELEPÍTÉSE

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Enterprise User Security

PRECÍZ Információs füzetek

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

PHP-MySQL. Adatbázisok gyakorlat

Adatbázis Rendszerek II. 2. Gyakorló környezet

MDAC - Microsoft Data Access Components

Elemi alkalmazások fejlesztése IV. Adatbáziskezel alkalmazás készítése QtDesignerben. Készítette: Szabóné Nacsa Rozália

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Adatbázis-kezelés ODBC-vel

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

LBRA6i integrált rendszer

Tartalomjegyzék 2. RENDSZER FELÉPÍTÉSE... 3

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

3. Beadandó feladat dokumentáció

Database Systems II. ZH összefoglaló

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Bevezetés: az SQL-be

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

GEIAL Kovács László. GEIAL Kovács László GEIAL Kovács László

Az SQL*Plus használata

LINUX LDAP címtár. Mi a címtár?

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

API tervezése mobil környezetbe. gyakorlat

A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI

Java és web programozás

WordPress segédlet. Bevezető. Letöltés. Telepítés

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

2 Access 2016 zsebkönyv

Adatbányászat és Perszonalizáció architektúra

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Tájékoztató. Használható segédeszköz: -

A FileZilla program beállítása az első belépés alkalmával

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Regisztráció Regisztráció WINTAX programrendszer regisztrációja

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

Adatok speciális megjelenítése

Entity Framework alapú adatbáziselérés

Példa webáruház kialakítás rendszerdokumentáció

Microsoft SQL Server telepítése

Vectory telepítési útmutató

ÜZLETI I TELLIGE CIA - VIZUALIZÁCIÓ

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 8. előadás Adatbázis-kezelés elemi eszközökkel 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Elérhetősége A MySQL az egyik legnépszerűbb SQL alapú relációs adatbázis-kezelő motor, jelenleg az Oracle tulajdonában van letölthető a www.mysql.com honlapról elérhető ingyenes és kereskedelmi változata is több platformon elérhető, legfrissebb változata az 5.5 grafikus kezelőfelülete a MySQL Workbench több programozási nyelvhez is ad elérési felületet a MySql Connector segítségével (pl. C++, Java,.NET) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:2 Használata A MySQL beépített felhasználó-kezeléssel rendelkezik a rendszergazda felhasználó a root, a többi felhasználónak tetszőlegesen szabályozható a jogosultsága felhasználót létrehozni a create user utasítással, jogosultságot felvenni a grant privileges utasítással lehet, pl.: CREATE USER 'root'@'localhost' IDENTIFIED BY 'asd123'; GRANT ALL PRIVILEGES ON *.* TO 'tanulo'@'localhost' WITH GRANT OPTION; a felhasználó megadásával léphetünk be a konzol felületre: mysql u root -p Használata Általános MySQL utasítások: status: adatbázisszerver állapotának lekérdezése show databases: adatbázisok listázása use <adatbázis>: adatbázis használatba vétele show tables: aktuális adatbázis tábláinak listázása desc <táblanév>: tábla oszlopainak listázása show table status like '<táblanév>': tábla aktuális státuszának lekérdezése set password = '<jelszó>': jelszóváltás ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:3 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:4 A QtSQL modul biztosítja az SQL alapú adatbázisok kezelésének osztályait, amelyeket három csoportba sorolunk QSqlTableModel a modell osztályok biztosítják a logikai adatbázist, és az interfészt a felületi réteg számára: QSqlQueryModel, QSqlTableModel, QSqlRelationalModel QSqlIndex QSqlDatabase QSqlRecord az alkalmazásprogramozói (API) osztályok biztosítják az SQL elemek kezelését: QSqlDataBase, QSqlQuery, QSqlError, QSqlField, QSqlIndex, QSqlRecord a meghajtó osztályok biztosítják az adatbázis elérését és a kommunikációt: QSqlDriver, QSqlDriverCreator<T>, QSqlDriverCreatorBase, QSqlDriverPlugin, QSqlResult QSqlQuery QSqlDriver adatbázis QSqlResult ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:5 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:6 1

A modul osztályainak használatához a megfelelő osztályt kell meghivatkozni az aktuális fájlban, illetve lehetőség van a teljes modul betöltésére is: #include <QtSql> A modul alapból nem érhető el egy alap Qt alkalmazásban, használatát a projektfájlban jeleznünk kell a QT += sql utasítással a betöltendő modulok egy sorban is lehetnek, pl. QT += core gui widgets sql amennyiben konzol felületen szerkesztünk, a projektfájl létrehozásakor is hozzáadhatjuk a modult: qmake -project "QT += sql" Adatbázis meghajtók A QtSQL modul több beépített meghajtót is tartalmaz a különböző adatbázis-motorok kezelésére, valamint felületet biztosít további meghajtók készítésére, pl.: QMYSQL: MySQL QSQLITE2, QSQLITE: SQLite QOCI: Oracle Call Interface Driver QODBC: Open Database Connectivity (ODBC), Microsoft SQL Serverhez, valamint más ODBC adatforrásokhoz Nincs minden meghajtó előre telepítve, bizonyos esetekben további csomagként (pl. libqt5sql5-mysql) kell hozzáadnunk őket ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:7 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:8 Adatbázis kapcsolat Adatbázismotort betölteni, és kapcsolatot létesíteni a QSqlDatabase osztály segítségével tudunk, pl.: QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.sethostname("localhost"); // szerver db.setdatabasename("mydatabase"); // adatbázis db.setusername("root"); // felhasználónév db.setpassword("root"); // jelszó a betöltést az adddatabase() statikus metódussal végezzük a meghajtó megadásával, beállíthatjuk a szervert, az adatbázist, valamint a felhasználó adatait a rendelkezésre álló meghajtókat a drivers() metódussal kérhetjük le ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:9 Adatbázis kapcsolat Lehetőségünk van több kapcsolatot is kezelni a programban (statikus metódusokkal): a kapcsolatok elnevezéssel rendelkeznek, ezen keresztül érhetjük el őket: adddatabase(<meghajtó>, <név>) kapcsolatok listázhatóak (connectionnames()), lekérhetőek (database(<név>)), törölhetőek (removedatabase(<név>)) Kapcsolatot megnyitni az open(), bezárni a close() művelettel tudunk ha nem sikerül a megnyitás, hamissal tér vissza a program bezárása nem zárja be a nyitott kapcsolatokat ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:10 Parancskiadó objektumok SQL utasításokat QSqlQuery segítségével futtathatunk, pl.: if (query.exec("select id, data from mytable")) // lekérdezés futtatása // eredmények kiírása else // sikertelen futtatás cout << query.lasterror().text(); a konstruktorban megadható paraméterként az adatbázis kapcsolat, ha nem adjuk meg, az alapértelmezettet használja az exec() művelettel tetszőleges utasítást végrehajthatunk, és igazzal tér vissza, amennyiben sikerült végrehajtania a lasterror() segítségével lekérdezhetjük a hiba okát Lekérdezések olvasása Amennyiben lekérdezést hajtottunk végre, az eredményt soronként kezeljük, azaz egyszerre nem látjuk a teljes eredményt csak egy sorát lépegetni a first(), next(), previous(), last() utasításokkal adott sorra ugrani a seek(<sorszám>) metódussal, mindegyik igazat ad, ha tudott lépni alapból az eredmény első sora előtt állunk (tehát rögtön léptetni kell) amennyiben csak előre akarunk lépkedni, a setforwardonly() metódus optimalizálja a lekérdezést ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:11 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:12 2

Lekérdezések olvasása értéket lekérdezni a kijelölt sorból a value(<oszlopszám>) metódussal tudunk az érték QVariant típusú, így az tovább konvertálható alkalmas formára a size() megadja a lekérdezett sorok számát Pl.: while (query.next()) { cout << query.value(0).tostring(); // az első oszlop egész számot tartalmaz cout << query.value(1).toint(); // a második oszlopot szövegesen kérjük le ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:13 Feladat: Készítsünk egyszerű konzol alkalmazást, amely alkalmas az apartman adatbázis (apartments) felhasználók (user) táblájának beolvasására, sorok törlésére, valamint új értékek bevitelére. a program csak megfelelő felhasználónév/jelszó megadásával engedi elvégezni a tevékenységeket a program lekérdezés segítségével azonosít, beolvassa a táblatartalmat (azonosító, név, jelszó, szint), kilistázza, lehetőséget ad azonosító alapján törlésre, és beszúrásra a programot vezéreljük menün keresztül, ehhez hozzunk létre egy menü osztályt ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:14 Tervezés (adatbázis): Tervezés (alkalmazás): ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:15 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:16 Megvalósítás (main.cpp): int main(int argc, char *argv[]){ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // kapcsolat létrehozása if (db.open()) { // kapcsolat megnyitása // sikeres kapcsolódás Menu m; m.run(); // menü futtatása db.close(); // kapcsolat bezárása else { // sikertelen kapcsolódás return 0; Megvalósítás (menu.cpp): void Menu::ShowRemoveUser() { getline(cin, usernamestring); QSqlQuery removequery; // törlő utasítás removequery.exec("delete from user where user_name = '" + QString::fromStdString(userNameString) + "'"); // törlés végrehajtása ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:17 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:18 3

Az adatbázisban tárolt adatokat meg kell óvni az idegenek elől, biztonságossá kell tenni az adatokhoz való hozzáférést a programok az adatbázis-szerveren SQL lekérdezéseket futtatnak, amelyeket a programkódban összeállítanak szövegként az összeállítás során törekedni kell arra, hogy ne lehessen manipulálni az utasítást úgy, hogy az illetéktelen felhasználók hozzáférhessenek a tárolt adatokhoz Az SQL parancsok manipulációját nevezzük nak (SQL injection) leggyakoribb webes környezetben Pl.: // felhasználónév/jelszó bekérése query.exec("select user_name from users where user_name = '" + username + "' and password = '" + password + "'"); // username = "", password = "' or '1' = '1" // esetén: query.exec("select user_name from users where user_name = '' and password = '' or '1' = '1'"); // a feltétel minden sorra igazat ad, az egész // táblát lekéri ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:19 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:20 Az k kivédésének több módja van: a felhasználótól kapott értékek ellenőrzése, módosítása, pl.: username = username.remove("'"); felhasználó által megadható adatok korlátozása, pl.: lineedit.setinputmask("aaaaaaaaaaaaaaa"); // csak alfabetikus karaktereket fogad el lineedit.setvalidator( QRegExpValidator("[A-Za-z0-9]{1,8")); // 1-8 db alfanumerikus karaktert fogad el paraméteres utasítások használata az injekciót eleve kizáró megoldások használata (pl. modell-nézet architektúra) Utasítások paraméterezése Az utasítás paraméterezhető, azaz előre legyárthatjuk az utasítást a prepare(<utasítás>) utasítással a paramétereket a bindvalue(<paraméter>, <érték>) metódussal helyettesíthetjük be tényleges értékekre pl.: query.prepare("insert INTO mytable(id, data)" + "VALUES (:id, :data)"); query.bindvalue(":id", 1); // paraméter beírása query.bindvalue(":data", "something"); query.exec(); // végrehajtás a behelyettesítéskor átkódolja a kapott szöveget ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:21 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:22 Feladat: Készítsünk egyszerű konzol alkalmazást, amely alkalmas az apartman adatbázis (apartments) felhasználók (user) táblájának beolvasására, sorok törlésére, valamint új értékek bevitelére. Tervezés: a program csak megfelelő felhasználónév/jelszó megadásával engedi elvégezni a tevékenységeket a program paraméteres utasításokat fog használni, kikerülve az lehetőségét azonosít, beolvassa a táblatartalmat (azonosító, név, jelszó, szint), kilistázza, lehetőséget ad azonosító alapján törlésre, és beszúrásra ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:23 ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:24 4

Megvalósítás (menu.cpp): bool Menu::validateUser(){ validatequery.bindvalue(":name", QString::fromStdString(userName)); validatequery.bindvalue(":password", QString::fromStdString(userPassword)); // paraméterek behelyettesítése validatequery.exec(); // lekérdezés futtatása return validatequery.next(); // ha van eredmény, akkor sikeres a lekérdezés ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 8:25 5