16. diel - Diár s databázou v Jave - Metódy diára, výnimky a final
V minulej lekcii, Diár s databázou v Jave - Záznam, databáza a diár , sme rozpracovali jednoduchý diár s
databázou pomocou kolekcie ArrayList
.
V dnešnom tutoriáli aplikáciu dokončíme.
Trieda Diar
Do triedy Diar
pridajme dve pomocné metódy
naparsujDatumCas()
a naparsujDatum()
, ktoré vyzvú
používateľa na zadanie dátumu (a prípadne času) a vráti inštanciu
LocalDateTime
nastavenú na túto hodnotu. Najprv si metódy
ukážme, čoskoro si ich popíšeme:
Pridáme ešte potrebné importy:
Ako prvá vás bodne do oka
najskôr neznáme bloky try
a catch
. Názov pre tieto
bloky sú výnimky, v
tejto lekcii ich rozoberať nebudeme, preberajú sa kompletne až v kurze o súboroch. Pre nás je momentálne iba
dôležité vedieť, že zachytí kritickú chybu a celá aplikácia vďaka tomu
nespadne. Pokiaľ teda triedy LocalDateTime
alebo
LocalDate
nedokážu naparzovať vstup od užívateľa (tzn. že
zadal chybný formát dátumu a času), vypíšeme hlášku, že nebol dátum
správne zadaný. Keďže máme tieto bloky v nekonečnom cykle
while
, bude sa to opakovať do doby, kým používateľ nezadá
správny formát dátumu.
Obe metódy formátujú dátum známou metódou format()
,
konštanty FORMAT_DATA
a FORMAT_DATA_BEZ_CASU
si o
chvíľu deklarujeme. Metóda naparsujDatum()
by bez času vracalo
nechcený typ LocalDate
, vďaka tomu zavoláme v
return
metódu atStartOfDay()
aby sme vrátili
inštanciu triedy LocalDateTime
.
Pomocou metódy naparsujDatumCas()
budeme teda zadávať dátum
a čas, pomocou metódy naparsujDatum()
budeme zadávať iba
dátum. Druhá metóda bude slúžiť na vyhľadávanie záznamov v určitý
deň, pretože určite nebudeme chcieť odstrániť záznamy v danú hodinu a
minútu, ale záznamy v daný deň bez určenia času.
Konštanty
Do triedy si pridáme už spomínané verejné,
statické a finálne konštanty. Budú to
formattery dátumu a času. Kľúčové slovo final
si vysvetlíme
za chvíľu, statické a verejné atribúty to sú preto, aby boli použiteľné
aj pre ďalšie triedy v našej aplikácii bez vytvorenia inštancie. Každá
trieda môže používať tieto formattery, ktoré máme definované na jednom
mieste:
Pridáme si ďalší potrebný import:
Kľúčové slovo final
Toto kľúčové slovo sa môže deklarovať na premenné, atribútu, metódy alebo aj triedy.
Na premennej alebo atribúte
Kľúčové slovo final
na atribúte/premennej zamedzí
tomu, aby sa daný atribút/premenná mohla naďalej meniť, bude teda
konštantná (vždy rovnaká). Hodnota do premennej/atribútu
sa nemusí ihneď po deklarácii priradiť, ale pokojne až v priebehu. Má to
však aj malý háčik, pokiaľ deklarujeme napríklad:
Do atribútu
clovek
už nebudeme môcť priradiť nového človeka, budeme však
môcť stále meniť jeho atribúty, napríklad clovek.vek = 18
.
Atribút teda nie je v tomto prípade kompletne nemenný. Aby nebolo možné
zmeniť aj vek inštancie clovek
, museli by sme pridať kľúčové
slovo final
i atribútu vek
v triede
Clovek
.
Na triede
Finálna trieda sa už nemôže zmeniť a nemôže sa z nej ani dediť.
Na metódach
Finálne metódy nemôžu byť prepísané (@Override
) alebo
skryté potomkom.
Súbor Zaznam.java
Jeden formatter obsahuje dátum aj čas, jeden iba dátum bez času. Prejdime
do triedy Zaznam.java
a metódu toString()
pozmeňme
takto:
Keby sme si robili inštanciu
formatteru znova v každom zázname, bolo by to nepraktické. Takto máme
formattery na jednom mieste a keď sa rozhodneme formát zmeniť, zmeníme ho
len v triede Diar
. So statikou ale opatrne, nie vždy ju je vhodné
použiť.
Súbor Diar.java
Presunieme sa späť do súboru Diar.java
, kde si pridáme
ďalšie metódy.
Metóda vypisZaznamy()
Pridajme metódu vypisZaznamy()
, ktorá nájde záznamy v daný
deň a vypíše ich:
Pridáme ďalší import:
Metóda pridejZaznam()
Metóda pre vyzvanie užívateľa na vloženie parametrov nového záznamu a jeho pridanie do databázy bude nasledujúca:
Metóda vyhledejZaznamy()
Zostáva záznamy vyhľadávať a mazať. Metóda na vyhľadanie vráti
kolekciu ArrayList
s nájdenými záznamami (len podľa dátumu,
presný čas nebude hrať rolu). Vyzveme užívateľa na zadanie dátumu a to
odovzdáme databáze. Výsledok zobrazíme:
Metóda vymazZaznamy()
Mazanie záznamov je triviálne:
Metóda vypisUvodniObrazovku()
Ako posledný pridajme metódu na vypísanie úvodnej obrazovky programu s aktuálnym dátumom a časom a udalosťami na dnešok a zajtrajšok.
Súbor Poznamkovac.java
Môžeme víťazoslávne prejsť do hlavného súboru
Poznamkovac.java
a vytvoriť inštanciu diára. Tu umiestnime aj
hlavný cyklus programu s menu programu a reakciou na voľbu užívateľa. Je to
tá najvyššia vrstva programu:
Kód vyššie nie je
zložitý a už sme tu podobný mali veľakrát. Nezabudneme pridať ešte
import pre Scanner
:
Výslednú aplikáciu som na vyskúšanie požičal priateľke, nižšie vidíme výsledok 🙂:
Týmto sme si kolekciu
ArrayList
osvojili a bude nám pomerne dlho stačiť. Na záver by
som dodal, že takto si môžete urobiť databázu čohokoľvek. Môžete
použiť napr. triedu Student
z lekcie Gettery a settery v
Jave alebo ktorúkoľvek inú triedu. Môžete ukladať články, úlohy,
slony, čokoľvek, čo chcete v databáze spravovať. A čo ďalej?
V budúcej lekcii, Rozhranie (interface) v Jave , si vysvetlíme, čo je to rozhranie.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 1281x (25.87 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java