Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

1. diel - Úvod do databáz v C ++ a Qt

Vitajte v kurze, v ktorom sa naučíme programovať databázové aplikácie v C ++.

Každý programátor rieši otázku ukladanie dát svoje aplikácie, tzv. Otázku perzistencie. Niekedy mu stačí len dáta v pamäti, ale veľakrát je potrebuje uložiť externe, aby zostala dostupná, aj keď aplikáciu zatvoríme a spustíme znova.

K čomu databáze?

Možno vás napadlo, k čomu vlastne potrebujeme nejakú databázu. Dáta by sme rovnako dobre mohli ukladať do nejakých textových súborov, binárek, XML alebo niečoho podobného. Určite by to nejako fungovalo, my sme už dáta ukladali ako súbor vo formáte JSON, prečo to nestačí?

RDBMS

RDBMS - Databázy v C ++ pomocou Qt SQL

Označenie databázy je vlastne nepresné a v odbornej literatúre sa stretneme s označením RDBMS (Relation DataBase Management System). Slovensky je to preložené ako "databázový systém", čo znie naozaj hrozne a preto budem ďalej používať označenie databázový stroj alebo RDBMS. Databázový stroj (my budeme používať SQLite, ale môžete úplne rovnako pracovať s akoukoľvek inou DB) nie je len úložisko dát. Jedná sa o veľmi sofistikovaný a odladený nástroj, ktorý za nás rieši veľa problémov a zároveň je extrémne jednoduchý na použitie. S databázou totiž komunikujeme jazykom SQL, ktorým sú v podstate ľudsky zrozumiteľné vety.

Spolu s ukladaním dát je ale potrebné ďalej riešiť mnoho ďalších vecí. Asi by nás napadlo napr. Zabezpečenia alebo optimalizácie výkonu. RDBMS toho ale robí ešte oveľa viac, rieši za nás problém súčasnej editácia rovnaké položky niekoľkými užívateľmi v rovnaký okamih, ktorý by inak mohol zapríčiniť nekonzistentnosti databázy. RDBMS dáta v tomto prípade zamkne a odomkne až po vykonaní zápisu. Ďalej umožňuje spájať niekoľko dotazov do transakcií, kedy sa séria otázok vykoná vždy celá alebo vôbec. Nestane sa, že by sa vykonala len časť. Tieto vlastnosti databázového stroja sú zhrňované skratkou ACID, poďme si ju vysvetliť.

ACID

ACID je akronym slov Atomicita (nedeliteľnosť), Consistency (validita), Isolation (izolácia) a Durability (trvanlivosť). Jednotlivé zložky majú nasledujúci význam:

  • Atomicita - Operácie v transakcii sa vykonajú ako jedna atomická (nedeliteľná) operácie. Tzn. že ak nejaká časť operácie zlyhá, vráti sa databázy do pôvodného stavu a žiadne časti transakcie nebudú vykonané. Reálny príklad je napr. Prevod peňazí na bankovom účte. Ak sa nepodarí peniaze odpočítať z jedného účtu, nebudú ani pripísané na účet druhý. Inak by bola databázy v nekonzistentnom stave. Ak by sme si prácu s dátami riešili sami, mohlo by sa nám toto veľmi jednoducho stať.
  • Consistency - Stav databázy po dokončení transakcie je vždy konzistentné, teda validný podľa všetkých definovaných pravidiel a obmedzení. Nikdy nenastane situácia, že by sa databázy nachádzala v nekonzistentnom stave.
  • Isolation - Operácie sú izolované a navzájom sa neovplyvňujú. Ak sa zíde v jeden okamih viac dotazov na zápis do rovnakého riadku, sú vykonávané postupne, ako vo fronte.
  • Durability - Všetky zapísané dáta sú okamžite zapísané na trvanlivá úložisko (na pevný disk), v prípade výpadku el. energie alebo iného prerušenie prevádzky RDBMS všetko zostane tak, ako bolo tesne pred výpadkom.

Databáza (presnejšie databázový stroj) je teda čierna skrinka, s ktorou naše aplikácie komunikuje a do ktorej ukladá všetky dáta. Jej použitie je veľmi jednoduché a je odladená tak, ako by sme si sami zápis dát v programe asi ťažko urobili. Vôbec sa nemusíme starať o to, ako sú dáta fyzicky uložené, s databázou komunikujeme pomocou jednoduchého dotazovacieho jazyka SQL, viď ďalej. V dnešnej dobe sa vôbec neoplatí zaťažovať sa otázkou ukladanie dát, jednoducho siahneme po hotové databázu, ktorých je obrovský výber a sú väčšinou zadarmo. O databázu občas hovoríme ako o 3. vrstve aplikácie (1. vrstva je užívateľské rozhranie, 2. vlastné logika aplikácie, 3. je práve dátová vrstva).

Relačnej databázy

V tomto kurze budeme používať tzv. Relačnej databázy, čo sú aj tie najpopulárnejšie. Tento pojem označuje databázu založenú na tabuľkách. Každá tabuľka obsahuje položky jedného typu. Môžeme mať teda tabuľku uzivatele, ďalšiu tabuľku clanky a ďalšie potrebné komentare.

Databázovú tabuľku si môžeme predstaviť napríklad ako tabuľku v Exceli. Tabuľka uzivatele by mohla vyzerať asi takto:

Meno priezvisko dátum narodenia počet článkov
Jan Novák 11.3.1984 17
Tomáš márny 1.2.1989 6
Josef nový 20.12.1972 9
Michaela Slavíková 14.8.1990 1
Položky (konkrétne tu užívatelia) ukladáme na jednotlivé riadky, stĺpce potom označujú atribúty (vlastnosti, ak chcete), ktoré položky majú. Ak chceme s relačné databázou rozumne pracovať, každý riadok v tabuľke by mal byť opatrený unikátnym identifikátorom. U užívateľov by to mohlo byť napríklad rodné číslo, oveľa častejšie sa však používajú identifikátory umelé a to tak, že používateľa jednoducho očíslujeme. K tomu sa dostaneme neskôr.

Slovo relačné označuje vzťah (anglicky relation). Ten je medzi tabuľkami alebo medzi jednotlivými subjektmi v jednej tabuľke. To si však necháme na inokedy a zatiaľ budeme pracovať len s jednou tabuľkou zároveň.

Potrebné nástroje

Aké že nástroje v tomto kurze o prácu s databázami v C ++ budeme používať?

Sql

Tým prvým je jazyk SQL. Ak ste sa s SQL ešte nestretli, SQL dotazy si tu budeme popisovať. Nebudeme im ale venovať toľko času, ako je im venované v kurze zameranom len na ne, pretože budeme pracovať aj s C ++. Takže ak chcete SQL vedieť dobre, je dobrý nápad pozrieť sa aj na základy jazyka SQL (pre databázu SQLite).

Qt framework

Pre prácu s databázou v C ++ existuje hneď niekoľko knižníc. My budeme používať Qt SQL, ktoré je súčasťou nám už známeho frameworku Qt5.

Qt framework pre C ++ - Databázy v C ++ pomocou Qt SQL

Qt (číta sa ako anglické slovo "cute" = roztomilý) je populárny framework pre tvorbu nielen formulárových aplikácií, ktorý možno využiť na mnohých platformách aj v mnohých programovacích jazykoch. Už sme v ňom vytvárali formulárové aplikácie v C ++ a pretože keď pracujeme s databázou, typicky chceme dáta aj nejako graficky vypisovať a zadávať, hodí sa nám, že nemusíme používať niekoľko knižníc naraz, ale vystačíme si s Qt. Qt framework nám ponúka celkom širokú škálu podpory rôznych databázových systémov, viď. dokumentácie. Ak ste s Qt frameworkom ešte nepracovali, pripravte si ho podľa pokynov v lekcii Inštalácia Qt frameworku pre C ++.

SQLite

Databáza SQLite v C ++ - Databázy v C ++ pomocou Qt SQL

Pretože nechceme inštalovať žiadnu zložitú službu, ako je potrebné napr. Pre beh MySQL, použijeme rýchlu a jednoduchú databázu SQLite. Tá má v Qt výhodu - je priamo jeho súčasťou, nie je teda potrebné nič ďalšie.

Na rozdiel od veľkých databáz ako MySQL / MariaDB, PostgreSQL, ktoré beží ako služba, je SQLite iba malá knižnica nástrojov, ktorú majú už niektoré jazyky a frameworky zabudovanú v sebe. Každá databáza sa ukladá ako jeden obyčajný súbor na disk, väčšinou s príponou .db, ktorý je bez problémov prenositeľný. Pre prenos projektu teda stačí často len skopírovať aplikáciu so súborom s databázou a spustiť, žiadne inštalovanie služby databázy, nastavovanie prihlasovacích údajov v aplikácii, dumpování a následný import databázy. SQLite sa z tohto dôvodu hojne využíva najmä v desktopových aplikáciách. Za toto a za jej rýchlosť sa ale musíte zmieriť aj s jej nedostatkami.

Ako už názov napovedá, databázy je veľmi odľahčená, takže neobsahuje potrebné užívateľské oprávnenia, konfiguráciu (ktorá je možná čiastočne cez PRAGMA príkazy), či plnú podporu UTF, pokiaľ teda očakávate korektné českej radenia napr. Č po c, tak márne, buď si to sami dopíšete priamo v SQLite, alebo to necháte až na aplikáciu.

Databázu teda už máme, niečo by sa k nej však predsa len hodilo - nejaký vizuálny správcu.

Osobne môžem odporučiť SQLite Studio, ktoré funguje ako na Windows, tak na Linuxe a navyše je tiež písané v Qt.

To je k úvode už naozaj všetko. V budúcej lekcii, Databázy v C ++ a Qt - Pripojenie k databáze a nová tabuľka , si vytvoríme svoju prvú databázovú aplikáciu v C ++, SQLite a Qt!


 

Všetky články v sekcii
Databázy v C ++ pomocou Qt SQL
Preskočiť článok
(neodporúčame)
Databázy v C ++ a Qt - Pripojenie k databáze a nová tabuľka
Článok pre vás napísal Virlupus
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje webovým aplikacím, skladově-účetnímu softwaru, 3D grafice, lexiální analýze a parserování. Studuje fyziku na MFF UK. Učil IT na střední škole.
Aktivity