15. diel - Diár s databázou v Jave - Záznam, databáza a diár
V predchádzajúcom cvičení, Riešené úlohy k 12. lekcii OOP v Jave, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V dnešnom tutoriále si do ArrayListu skúsime uložiť objekty.
Najprv som chcel urobiť databázu používateľov, ale používateľa sme tu
už niekoľkokrát mali. Keďže sme sa nedávno naučili dátum a čas,
naprogramujeme si diár. Do databázy budeme ukladať jednotlivé záznamy a
vždy vypíšeme ten dnešný a zajtrajší. Databáza to nebude samozrejme tá
v tom pravom slova zmysle (na to ešte nemáme skúsenosti), ale bude sa jednať
práve o ArrayList
v operačnej pamäti počítača. Bude
umožňovať záznamy pridávať, hľadať ich podľa dátumu a mazať podľa
dátumu a času. Založme si nový projekt, ktorý nepomenujeme
Diar
(budeme toto meno potrebovať pre triedu) ale napr.
Poznamkovac
, to bude názov našej výslednej aplikácie.
Hlavnú triedu Main.java
pomenujeme na
Poznamkovac.java
. Môžeme to urobiť cez kontextovú ponuku
(pravým kliknutím na súbor Main.java
-> Refactor
-> Rename) prípadne ručne premenujeme súbor a potom aj názov
triedy (samozrejme bez prípony) vo vnútri kódu.
Záznam
Najprv si urobme triedu, ktorej inštancie budeme ukladať. Nazvime ju
Zaznam
. Záznam v diári sa bude viazať k nejakému dátumu a
času. Tiež bude obsahovať nejaký text. Záznam teda bude niečo ako
12. ledna 2013 - Vyvenčit psa
. To je asi všetko, trieda môže
vyzerať takto:
Trieda v podstate slúži len
na záznam dát a nemá žiadne metódy (až na konštruktor a metódu
toString()
a nejaké tie gettery/settery). Funkcionalitu ako takú
ale neponúka. Bystrejší si určite všimli, že metóda
toString()
nijako neformátuje dátum a čas. K tomu sa neskôr
ešte vrátime. Okomentovávať v lekcii nebudem, v prípade potreby si potom
môžete stiahnuť celý hotový projekt aj s komentármi.
Databáza
Pretože program bude o niečo zložitejší, rozdelíme ho do viacerých
objektov (vrstiev). Záznam máme, teraz si vytvoríme objekt
Databaze
, v ktorej budú záznamy uložené. Opäť bude mať
privátnu kolekciu ArrayList
, ako mal Losovac
. Ten
bude teraz typu Zaznam
. Diár bude umožňovať záznamy
pridávať, mazať a vyhľadávať podľa dátumu. K projektu teda pridáme
triedu Databaze
. Bude veľmi podobná minulej triede
Losovac
:
Všimnite si použitie
"diamond operátora" pri vytváraní novej inštancie ArrayList
. Od
Javy 7 nemusíme generický typ uvádzať 2x, ale stačí ho uviesť iba pri
deklarácii premennej a špicatej zátvorky môžeme druhýkrát už ponechať
prázdne. Tiež si povedzme, že keby sme špicaté zátvorky nenapísali vôbec
a ArrayList
deklarovali aj inicializovali bez uvedenia generického
typu, položky by sa ukladali ako typ Object
. Museli by sme ich
vždy na naše zaznamy
ručne prevádzať. Ďalej v seriáli si
ukážeme, ako by sa to robilo a listy ešte potom stretnete pri
kolekciách.
Trieda Databaze
teda slúži iba na manipuláciu s dátami.
Obsahuje vnútornú kolekciu zaznamy
, tá sa inicializuje v
konštruktore. Mohli by sme použiť aj inicializáciu bez konštruktora priamo
pri deklarácii vo forme:
Dodajme triede metódy na pridanie, vymazanie a vyhľadanie záznamu.
Pridanie záznamu by malo byť jasné:
Budeme si musieť pridať aj import:
Ako druhú metódu pridajme
nájdenie záznamov v daný deň. Metóda bude vracať kolekciu
ArrayList
nájdených záznamov, pretože ich pre ten deň môže
byť v databáze viac. Záznamy budeme môcť vyhľadávať podľa dátumu i
času alebo len podľa dátumu. Môžeme tak nájsť záznamy v konkrétny deň
bez ohľadu na to, v akú sú hodinu. Podľa čoho budeme chcieť vyhľadávať
bude udávať parameter dleCasu
typu boolean
. Pokiaľ
bude mať hodnotu false
, hľadáme len podľa dátumu bez ohľadu
na čas. Kolekciu ArrayList
si najskôr vytvoríme a potom do neho
pridávame záznamy, ktoré zodpovedajú hľadanému dátumu. Zodpovedať musí
buď celý dátum a čas (ak hľadáme aj podľa času) alebo len dátum (ak
hľadáme len podľa dátumu). Naplnený ArrayList
s nájdenými
záznamami vrátime:
Nakoniec pridáme vymazanie
záznamov v určitú dobu. To urobíme pomocou metódy
najdiZaznamy()
a nájdené záznamy jednoducho proiterujeme az
kolekcie ArrayList
odstránime. Budeme mazať podľa presného
dátumu i času, 2. parameter pri metóde najdiZaznamy()
bude teda
na hodnote true
:
Diár
Teraz si pridáme k projektu poslednú triedu, bude to samotný diár.
Nazvime ju Diar
. Ten už bude obsahovať metódy na komunikáciu s
užívateľom. Všimnite si, ako aplikáciu rozdeľujeme a jednotlivé jej
časti zapuzdrujeme. Kolekcia ArrayList
je zapuzdrená v databáze,
ktorá nad ním postavila ďalšie metódy pre bezpečnú manipuláciu s jeho
obsahom. Samotnú databázu teraz vložíme do diára. Tým oddelíme logiku a
prácu s dátami od komunikácie s užívateľom a ďalšími vstupmi/výstupmi
programu. Trieda Diar
teda bude komunikovať s užívateľom a
dáta od neho odovzdá databázu.
Pridajme si privátnu inštanciu databázy, ktorú si vytvoríme v
konštruktore. Podobne pridajme aj inštanciu triedy Scanner
,
ktorú budeme v triede potrebovať:
V ďalšej lekcii, Diár s databázou v Jave - Metódy diára, výnimky a final , sa pozrieme na metódy triedy Diar
,
krátko pozeráme na výnimky a kľúčové slovo final.