Potpuni vodič za stvaranje lokalnih baza podataka s dovoljno prostora na Androidu

  • Room djeluje kao napredni sloj apstrakcije na vrhu SQLitea kako bi se pojednostavilo pohranjivanje podataka.
  • Arhitektura se temelji na tri stupa: entitetima, DAO-ima i klasi Database.
  • Omogućuje izvornu integraciju s Jetpack komponentama kao što su LiveData, ViewModel i Kotlin Coroutines.
  • Nudi provjeru SQL upita tijekom kompilacije, drastično smanjujući pogreške tijekom izvođenja.

Izrada lokalnih baza podataka s prostorom na Androidu

Prilikom razvoja aplikacija koje obrađuju znatnu količinu strukturiranih podataka, shvaćamo da se ne možemo uvijek osloniti na internetsku vezu. Tu se pojavljuje mogućnost spremite informacije lokalnoTo omogućuje aplikaciji da funkcionira čak i u zrakoplovnom načinu rada ili u područjima sa slabom pokrivenošću. Najčešći scenarij je stvaranje sustava predmemorije kako bi korisnik mogao nastaviti pregledavati svoj sadržaj bez prekida.

Kako bi se to postiglo bez zaglibljivanja u kodu, Google nudi biblioteku Room. U osnovi, to je sloj apstrakcije na vrhu SQLitea Skida nam prljavi, repetitivni posao s leđa, omogućujući nam da iskoristimo punu snagu relacijske baze podataka na puno moderniji i sigurniji način. Zaboravite na pisanje standardnog koda sklonog greškama; Room osigurava da se sve bolje uklapa.

Zašto odabrati Room umjesto tradicionalnog SQLitea?

Korištenje SQLiteovih izvornih API-ja može biti prava glavobolja jer se radi o sustavu niske razine. Jedan od najvećih rizika je taj što se SQL naredbe ne provjeravaju dok se aplikacija ne pokrene, što znači da Jednostavna pogreška u tipkanju može uzrokovati zatvaranje aplikacije. neočekivano. Room to rješava implementacijom Verifikacija upita za vrijeme kompajliranja, upozoravajući vas ako nešto nije u redu čak i prije pokretanja aplikacije na uređaju.

Nadalje, Room se besprijekorno integrira s Jetpack arhitekturom, što uvelike olakšava dosljednost podataka na svim zaslonima. Prilikom korištenja bilješke za pomoćTo drastično smanjuje ponavljajući kod (poznati standardni kod), čineći projekt mnogo održivijim i skalabilnijim na dugi rok.

SQL i NoSQL sustavi za upravljanje bazama podataka
Povezani članak:
Aplikacije i upravitelji za SQL i NoSQL baze podataka na mobilnim uređajima

Bitne komponente arhitekture

Da bi Room funkcionirao, moramo koordinirati tri temeljna elementa koja djeluju kao tim:

  • Entiteti: To su Kotlin klase koje predstavljaju tablice baze podataka. Svaka instanca entiteta odgovara retku u odgovarajućoj tablici.
  • Objekti za pristup podacima (DAO): To su sučelja gdje definiramo metode za upite, umetanje, brisanje ili ažuriranje informacija. Oni su most između logike aplikacije i podataka.
  • Klasa baze podataka (RoomDatabase): To je glavna pristupna točka i apstraktna klasa koja održava vezu i definira koji su entiteti dio sustava.

Tehnička konfiguracija i ovisnosti

Da bismo započeli s radom s Roomom, prvo moramo pripremiti datoteku build.gradleBitno je dodati ovisnosti od vrijeme izvođenja i kompajlerAko radite s Kotlinom, trebali biste koristiti kapt o ksp Za obradu napomena; ne uključujte oboje kako biste izbjegli sukobe. Dodavanje ekstenzije se također toplo preporučuje. soba-ktxšto je ono što omogućuje korištenje funkcije suspenzije i korutinesprječavanje zamrzavanja korisničkog sučelja prilikom izvođenja zahtjevnih operacija.

Implementacija podatkovnog sloja korak po korak

Prvo definiramo osobaKoristimo anotaciju @Entity reći Roomu da je ova klasa tablica. Unutra moramo označiti polje s @PrimaryKey kako bi svaki zapis bio jedinstven; ako želimo da baza podataka automatski dodijeli ID, koristimo autoGenerate = true. Također možemo koristiti @ColumnInfo ako želimo da stupac u SQLiteu ima drugačije ime od varijable u Kotlinu.

Zatim prelazimo na DAOOvdje stvaramo označeno sučelje s @DaoZa jednostavne operacije poput umetanja ili brisanja koristimo anotacije. @Insert, @Update y @DeleteMeđutim, za prilagođena pretraživanja koristimo @Query, gdje izravno pišemo SQL naredbu. Vrlo koristan trik je da možemo vratiti LiveData ili FlowTo omogućuje sučelju da se samo ažurira čim se podaci u tablici promijene.

Konačno, konfigurirali smo Baza podataka sobaOva klasa mora biti apstraktna i protezati se od RoomDatabaseDodaje se sljedeća napomena: @Database označavajući sve entitete koje sadrži i verziju baze podataka. Kako bi se izbjeglo istovremeno otvaranje više instanci baze podataka, idealno rješenje je implementirati Singleton uzorak pomoću a companion object s metodom getInstance.

Integracija s MVVM arhitekturom i repozitorijima

Da bi aplikacija izgledala profesionalno, ne bismo trebali pozivati ​​bazu podataka izravno iz prikaza. Idealno bi bilo koristiti... skladišteSpremište djeluje kao posrednik koji odlučuje hoće li se podaci dohvaćati s mreže ili iz lokalne predmemorije. Na primjer, možemo programirati aplikaciju da prvo pokuša dobiti podatke s DAO-a i, ako je popis prazan i postoji veza, uputi zahtjev poslužitelju putem REST API-ja.

Ovaj tok se zatvara s ViewModelkoji je odgovoran za izlaganje podataka fragmentu ili aktivnosti. Prilikom korištenja AndroidViewModelimamo pristup kontekst aplikacije za instanciranje baze podataka. Na taj način postižemo podjelu odgovornosti gdje pogled promatra samo status podataka i ne brine se odakle dolaze ili kako su pohranjeni.

Ostale značajke i optimizacije

Room vam omogućuje rješavanje složenih odnosa između tablica pomoću strani ključevi i mogućnost ugrađivanja entiteta unutar drugih pomoću @EmbeddedAko u bilo kojem trenutku trebamo promijeniti strukturu tablice (na primjer, dodati stupac), Room nam nudi optimizirane migracijske rute kako korisnik ne bi izgubio svoje podatke prilikom ažuriranja aplikacije.

Za one koji žele podići perzistentnost na višu razinu, postoje eksperimentalni alati koji vam omogućuju generiranje HTTP krajnjih točaka temeljenih na Room DAO-ima, olakšavajući besprijekornu komunikaciju između Kotlin poslužitelja i Android aplikacije prema filozofiji prvo izvan mrežeosiguravajući da je korisničko iskustvo uvijek besprijekorno, bez obzira na njihovu vezu.

SQL i NoSQL sustavi za upravljanje bazama podataka
Povezani članak:
Aplikacije i upravitelji za SQL i NoSQL baze podataka na mobilnim uređajima

Implementacija Rooma transformira upravljanje podacima u Androidu, uklanjajući krhkost SQLitea i pružajući robustan tijek rada temeljen na Jetpack komponentama. Kombiniranjem jasnih entiteta, učinkovitih DAO-a i centralizirane baze podataka pomoću Singleton uzorka postižemo puno brže aplikacije koje mogu funkcionirati izvan mreže i izuzetno ih je lako održavati zahvaljujući provjeri pogrešaka tijekom kompilacije. Podijelite ove informacije kako bi više ljudi moglo saznati o ovoj temi.


Dodaj kao preferirani izvor