Hirdetés

Alkalmazásfejlesztés badára: Adatbáziskezelés (3. rész)

Bevezető

Az előző poszt végére összeraktunk egy applikációt, amely képes kilistázni egy adatbázis tartalmát. Tegyük fel, hogy egyre többet használjuk a kis programunkat, pár hét alatt irdatlan mennyiségű bejegyzést beleírva. Ekkor minden újabb frissítéskor egy hétmérföldes listát kapunk, amely nem elég, hogy átláthatatlan, nagyon lassú is, hiszen az összes rekordot a memóriában tartjuk. Erre a megoldás a lapozás (az angol szakzsargonban pagination), amellyel egyszerre csak egy megadott számú elemmel töltjük fel a listát, ami előre és hátra lapozható: minden lapozáskor törüljük az előző elemeket, és az oldalszámnak megfelelő intervallumra cseréljük. Ezt az adatbázis szintjén, a lekérdezésbe építjük bele. Megoldás lenne az is, ha egy egyszeri lekérdezés során feltöltenénk a sorokkal egy ArrayList-et, majd ezen lépkednénk tízesével, azonban ez csak félmegoldás: bár egy oldalon csak tíz rekord szerepelne, a másik problémánk nem oldódna meg, az összes sor a memóriában tárolódna. A lapozás vezérléséhez az Osp::Ui::Controls::Softkey nevű vezérlőket fogjuk használni, ezek a képernyő bal- és jobb szélén elhelyezkedő gombocskákat jelölik.

Lazy loading for lazy people

A lazy loading egy tervezési paradigma, melynek lényege, hogy az objektumokat csak akkor töltjük be a memóriába, ha ténylegesen szükségünk van rájuk. Ez adatbázisra castolva annyit tesz, hogy megszabunk egy n darabszámot, ez lesz az oldalankénti maximális rekord, és egyszerre csak ennyit töltünk be a memóriába. Lapozás hatására pedig az előző/következő n darabot, és így tovább. Mint már említettem, query szinten építjük be a lapozást. Erre külön függvényt is írtam, getNRecords() néven, mely bemenőként kapja az aktuális oldal számát, illetve az oldalankénti rekordszámot. A lekérdezés a következőképpen módosul: a végére szúrjuk a LIMIT BY ?, ? varázsszavakat, ezekhez kötjük a bemenőket. A visszakapott enumerator a limitált sorokat fogja tartalmazni, ezekkel pakoljuk tele a listánkat. Eközben számon kell tartanunk, hogy hányadik oldalnál tartunk, ezt egyszerűen megtehetjük egy int változóval, ugyanilyen módon érdemes tárolni az oldalankénti maximális rekordszámot is, így ezt könnyen tudjuk változtatni (akár futási időben is).

Soft keys for soft people

A lapozást az úgynevezett softkeyekkel lehet irányítani. Ezeket a legegyszerűbben úgy adhatjuk hozzá az alkalmazásunkhoz, hogy az UI builderben engedélyezzük a formon. Ez után az init részben hozzárendelünk két actionID-t, majd ezeket lekezeljük a OnActionPerformed függvényben, ügyelve arra, hogy az aktuális oldalt számon tartó változót is frissítsük. Maximalisták még hozzáadhatnak két gombot, melyek az első, illetve az utolsó oldalra ugranak, vagy egy labelt, amin keresztül az aktuális oldalszámot adják a felhasználó tudtára, én ezektől most eltekintettem.

A fentieket megvalósító példakód természetesen ismét letölthető. A következő bejegyzésben folytatjuk az alkalmazásunk személyre szabását. Ha kimaradt valami az adatbáziskezelésből, ami szerintetek fontos, vagy csak szimplán érdekel titeket, nyugodtan írjatok a fórumba.

holdmester

Előzmények