Išsamus vadovas, kaip naudoti „Room for Local Database“ sistemoje „Android“

Paskutiniai pakeitimai: 3 lapkričio, 2026
Autorius: Pikselių
  • Tai pakeičia rankinį SQLite apdorojimą abstrakcijos sluoksniu, kuris patvirtina užklausas kompiliavimo metu.
  • Jis sudarytas naudojant tris esminius komponentus: lentelių objektus, operacijų DAO ir ryšio duomenų bazės klasę.
  • Tai leidžia valdyti sudėtingus ryšius ir schemų perkėlimą, kad būtų išvengta duomenų praradimo atnaujinant programą.
  • Jis sklandžiai integruojasi į MVVM architektūrą naudodamas saugyklas, „ViewModel“ ir asinchroninius srautus, tokius kaip „Flow“.

Konceptualus vietinės kambario duomenų bazės vaizdavimas „Android“ išmaniajame telefone, pabrėžiant vidinę atmintinę.

Kuriant programą, kuri tvarko didelį kiekį organizuotų duomenų, suprantama, kad nuolatinis pasikliavimas interneto ryšiu yra rizikingas. Geriausias būdas išvengti programos nereagavimo, kai vartotojas patenka į tunelį arba pritrūksta duomenų, yra įdiegti vietinę saugojimo sistemą . Čia praverčia „Room“ – įrankis, leidžiantis išsaugoti informaciją įrenginyje, kad vartotojo patirtis būtų sklandi ir prieinama bet kuriuo metu.

Iš esmės „Room“ veikia kaip intelektualus tiltas per „SQLite“. Nors „SQLite“ yra labai galingas, darbas su juo tiesiogiai gali būti galvos skausmas, nes SQL reikia rašyti ranka ir nežinai, ar padarei klaidą, kol programa neužstringa vykdymo metu. „Room“ tai išsprendžia suteikdama mums abstrakcijos sluoksnį , kuris tikrina užklausas, kol kompiliuojate kodą, taip sutaupant daug derinimo laiko ir pašalinant pasikartojantį kodą, kuris paprastai nuobodžiauja bet kuriam programuotojui.

Asmuo, naudojantis „Android“ išmanųjį telefoną metro tunelyje, iliustruojantis vietinių duomenų išsaugojimo poreikį naudojimui neprisijungus.

Pagrindiniai kambario ramsčiai

Holografinė duomenų lentelės su eilutėmis ir stulpeliais vizualizacija mobiliajame ekrane, vaizduojanti kambario objektus ir pirminius raktus.

Norėdami sukurti duomenų bazę su šia biblioteka, turite suprasti tris pagrindinius elementus, kurie veikia kartu. Pirma, turime duomenų objektus , kurie yra tiesiog klasės, apibrėžiančios, kaip lentelė atrodys duomenų bazėje; kiekvienas šios klasės egzempliorius atitinka lentelės eilutę.

  Išsamus ir naujausias geriausių „Nintendo Switch“ emuliatorių, skirtų asmeniniams kompiuteriams ir „Android“, vadovas

Taip pat yra duomenų prieigos objektai (DAO) . Šios sąsajos yra sąveikos pagrindas, nes jose apibrėžiami duomenų įterpimo, ištrynimo ar paieškos metodai. Užuot rašę sudėtingas užklausas savo verslo logikos viduryje, tiesiog iškviečiate DAO metodą ir viskas. Galiausiai yra duomenų bazės klasė , kuri yra pagrindinis prieigos taškas ir atsakinga už pagrindinio ryšio valdymą.

Konfigūravimas ir paleidimas

Programinės įrangos kūrėjas, dirbantis profesionalioje aplinkoje su dviejų monitorių sistema, idealiai tinkančia „Android“ programavimo kontekstui.

Norėdami pradėti, turite pridėti tinkamas priklausomybes prie savo „build.gradle“ failo. Priklausomai nuo jūsų versijos, „Room“ gali reikalauti KSP („Kotlin Symbol Processing“) arba „kapt“, kad apdorotų anotacijas. Būtina įtraukti vykdymo laiko biblioteką, kompiliatorių ir, jei dirbate su „Kotlin“, korutino plėtinį („room-ktx“) , kad operacijos neužblokuotų vartotojo sąsajos.

Objektų ir lentelių kūrimas

Norėdami konvertuoti klasę į lentelę, naudojame anotaciją @Entity. Galite leisti Room nuspręsti pavadinimą arba patys jį priskirti naudodami savybę tableName. Pirminio rakto apibrėžimas naudojant @PrimaryKey yra privalomas ; jį galima sugeneruoti automatiškai, jei nenorite rankiniu būdu tvarkyti ID. Jei turite laukų, kurių nenorite saugoti duomenų bazėje, pvz., daug atminties naudojantį vaizdą, galite naudoti @Ignore , kad juos ignoruotumėte.

Tais atvejais, kai reikia saugoti sudėtingus duomenų tipus, kurių „SQLite“ pagal numatytuosius nustatymus nesupranta (pvz., datą), turite sukurti tipų keitiklius . Naudodami `@TypeConverter`, mokote Room, kaip transformuoti tą sudėtingą objektą į primityvų tipą, pvz., `Long`, ir atvirkščiai, o tada užregistruojate šiuos keitiklius pagrindinėje duomenų bazės klasėje.

  Kaip išversti žaidimus „Android“ sistemoje realiuoju laiku

DAO ir užklausų įvaldymas

Magija vyksta DAO. Turite patogius metodus, tokius kaip @Insert, @Update ir @Delete . Įterpimams galite apibrėžti konfliktų strategijas, tokias kaip REPLACE, kad jei duomenys jau yra, jie būtų automatiškai perrašyti. Specifinėms užklausoms naudojame @Query , kur rašome SQL. Vietos yra daug, nes jei SQL stulpelio pavadinime padarysite klaidą, sistema jus įspės prieš diegdama programą.

Kadangi duomenų bazės operacijos yra lėtos, jos niekada neturėtų būti vykdomos pagrindinėje gijoje . Todėl geriausia pažymėti funkcijas kaip „suspend“, skirtas naudoti su „Kotlin“ korutinomis, arba nustatyti, kad jos grąžintų stebimus tipus, tokius kaip „Flow“ arba „LiveData“ , kad sąsaja automatiškai atsinaujintų, kai tik pasikeičia lentelės duomenys.

Duomenų ryšių valdymas

Realiame pasaulyje duomenys yra susiję. „Room“ vengia lėto įkėlimo, kad vartotojo sąsaja neužstrigtų, todėl naudojame tarpines klases su `@Relation` . Ryšiui „vienas su vienu“ arba „vienas su daugeliu“ tiesiog apibrėžkite klasę, kurioje yra pagrindinis objektas ir susijusių objektų sąrašas. Ryšiui „ daug su daugeliu“ turėsite sukurti kryžminių nuorodų lentelę, kuri susieja abiejų objektų ID.

Išplėstinis administravimas ir perkėlimai

Kai jūsų programa auga ir jums reikia pridėti stulpelį prie lentelės, negalite tiesiog pakeisti klasės. Turite padidinti duomenų bazės versiją ir apibrėžti „Migration“ objektą. Jei nenorite rašyti migracijos SQL, šiuolaikinės „Room“ versijos siūlo „@AutoMigration“ , kuri atlieka sunkų darbą už jus, kai eksportuojate schemą.

  „Signal“ – saugi pranešimų siuntimo programėlė, apsauganti jūsų pokalbius

Jei migruojate senesnę programą, kuri jau naudoja gryną „SQLite“, procesas apima modelių anotacijas, DAO sukūrimą ir tuščio migracijos kelio apibrėžimą, nes duomenų struktūra nesikeičia, keičiasi tik tai, kaip prie jos prisijungiate. Pažangesniems vartotojams taip pat galima perkelti duomenų bazę iš jau esamo failo naudojant „createFromAsset“.

Rekomenduojama architektūra: saugykla ir „ViewModel“

MVVM architektūros 3D diagrama, rodanti duomenų srautą tarp vartotojo sąsajos, „ViewModel“, saugyklos ir kambario duomenų bazės.

Norint išvengti kodo chaoso, geriausia laikytis MVVM architektūros. Saugykla veikia kaip tarpininkas; ji nusprendžia, ar duomenys bus gauti iš tinklo, ar skaitomi iš kambario vietinės talpyklos. Savo ruožtu, „ViewModel“ yra atsakingas už tų duomenų rodymą rodinyje. Įgyvendindami duomenų bazę kaip „ Singleton“ , užtikriname, kad vienu metu nebūtų atidarytos kelios instancijos, nes tai sunaudotų per daug įrenginio išteklių.

„Implementing Room“ transformuoja „Android“ programos patikimumą, užtikrindamas saugų, efektyvų ir lengvai prižiūrimą duomenų išsaugojimą. Integruodami tiksliai apibrėžtus objektus, optimizuotus DAO ir saugyklų pagrindu veikiančią architektūrą, sukuriate programą, galinčią veikti neprisijungus ir pasižyminčią dideliu reagavimo greičiu, pašalindami rankinio valdymo riziką, susijusią su „SQLite“, ir išnaudodami kompiliavimo laiko patikrinimą.