Mikroandmebaasi ülesande nõuded
Loodav programm on korraga nii väike kasulik teek kui käsurea programm, mis võimaldab teha päringut üle mitme tulpadeks jagatud tekstifaili.
Päringuks on lihtsustatud variant SQL SELECT päringust: FROM tabelitena kasutame faile, WHERE päringutingimused on suhteliselt piiratud. Mingeid aliasi anda, alampäringuid teha, agregaatfunktsioone kasutada jne ei saa.
Tekstifailide formaat on CSV (comma separated values, sellisteks saab salvestada näiteks Exceli faile).
Tekstifailidel on päis, selles mõttes, et esimene rida (muidu harilik CSV rida) sisaldab tulpade nimesid.
Programm niisiis:
- Sisaldab kasulikku teeki (st hulka funktsioone):
- SELECT päringu parsimiseks
- andmete lugemiseks failist
- parsitud päringu teostamiseks mälus
- tulemuse väljatrükkimiseks
Seda teeki saaks kasutada teised programmid (umbes nagu Ecki TextIO klassi)
- Võimaldab anda päringu käsurea parameetrina näiteks nii: java "select * from isik, amet where isik.amet=amet.ametinimi") mispeale punktis (a) loetletud funktsioonide abiga teostatakse päring ja trükitakse tulemus (päisega csv formaadis!) välja.
Olulised lihtsustused
Selles praktikumiülesandes eeldame, et meil on kettal üks või mitu faili andmetega, ning realisatsioon loeb nad hakatuseks vajaduse järgi mällu ja alles seejärel asub mälust vajalikke andmeid otsima.
Andmete kirjeldamist, muutmist ja lisamist olemasolevatesse failidesse selles ülesandes programmeerida ei ole vaja.
Kuna praktikumis ei jõuaks keegi väga palju asju valmis programmeerida, on vaja teha valmis ainult mõned, suhteliselt lihtsad funktsioonid.
Andmete esitus kettal
Meie süsteem eeldab, et andmed
on kettal failides, iga fail
esitab ühte tabelit:
- Iga fail koosneb tulpadest.
- Faili iga rida (v.a. esimene rida) sisaldab ühte rida
tabelist, ning tulpade vahel on kas koma või semikoolon: kumbat sinu programm eeldab (alati ühte kahest), see peab olema sinu programmi ühe globaablse muutujaga määratav.
- Esimene rida on muidu harilik CSV rida, kuid sinu teegifunktsioonid eeldavad,
et esimene rida sisaldab tulpade nimesid, ja mitte sisulisi andmeid. Andmete sisselugemisel ja trükkimise juures loetakse ja trükitakse esimene rida loomulikult ka, samamoodi, kui kõik ülejäänud.
- Iga andmeühik on string ja ta ei ole failis pandud jutumärkide vahele.
- Üheski andmeühikus (stringis) ei tohi esineda jutumärke ega eraldajat - koma või semikoolonit - muidu läheks rea struktuur sassi.
Näide nelja tulba ja nelja reaga (neis esimene päiserida) failist kettal:
eesnimi,pereknimi,vanus,pikkus Jaan,Mets,32,170.5 Mihkel,Karu,21,180.4 Anna Marie,Rebane,22,165
Pane tähele, et stringides tohivad olla tühikud (näiteks nimes Anna Marie).
NB!
- Selline andmete esitamise formaat on väga harilik: seda nimetatakse CSV (comma separated values) ja te saate MS Exceli tabeleid selliselt kettale salvestada (Save as -> vali CSV formaat) ja ka lugeda.
- Eesti settingute korral kasutab Excel CSV formaadi salvestamise korral koma asemel semikoolonit ; (põhjus: komaga numbrid Eesti settingutes on komaga, kuid normaalsetes settingutes on komaga numbrid punktiga)
- Kui mõni string Exceli tabelis sisaldab koma, siis paneb Excel CSV-formaadis salvestamisel selle ümber erandina jutumärgid.
- Kui mõni string Exceli tabelis sisaldab ise jutumärki, siis asendab Excel CSV-formaadis salvestamisel selle topelt-jutumärgiga.
Meie oma praktikumitöös eeldame lihtsuse mõttes,
et stringides komasid ja jutumärke ei ole.
Sellega pääseme äsjakirjeldatud eranditest,
st olukorrast, kus vahel stringidel jutumärgid
ümber ja stringi sisemised jutumärgid on
asendatud topelt-jutumärgiga.
Oluline: vigade töötlus
Mistahes vigade ilmnemisel ei tohi programm nö kokku kukkuda või anda Java enda, süsteemset veateadet, millest kasutaja aru ei saa.
Vead tuleb kinni püüda (kas if-dega kontrollides või try ... catch-i kasutades) ning anda kasutajale arusaadav veateade.
Millised on vead, mis võivad juhtuda (näited: ei pea kasutama täpselt sellist vigade "kataloogi" ja veateateid):
- päringu süntaks on vale
- päringus nõutud faili ei leitud
- päringus nõutud faili ei saa avada
- faili ridades on erinev tulpade arv
- faili päisereas puudub päringus nõutud tulp