Huonetietokannan käyttö | Android Jetpack

Ashish Rawat

Seuraa

23. helmi, 2019 – 6 min read

Sille, jotka eivät tiedä, mikä on Android Jetpack, niin

Android Jetpack on kokoelma Android-ohjelmistokomponentteja, jotka helpottavat hienojen Android-sovellusten kehittämistä.
Ne auttavat sinua

  • Seuraamaan parhaita käytäntöjä
  • Vapauttamaan sinut boilerplate-koodin kirjoittamisesta.
  • Yksinkertaistamaan monimutkaisia tehtäviä, jotta voit keskittyä koodiin, josta välität.

Tässä on video Android Developers Channelista:

Jatkossa puhutaan Roomista

Room on pysyvyyskirjasto, joka on osa Android Jetpackia.

Tässä on video Android Developers Channelista:

Room tarjoaa SQLiten yläpuolelle abstraktiokerroksen, joka mahdollistaa sujuvan tietokantakäytön samalla kun se hyödyntää SQLiten koko tehon.

Roomia pidetään nykyään parempana lähestymistapana tietojen pysyvyydelle kuin SQLiteDatabasea. Se helpottaa SQLiteDatabase-objektien kanssa työskentelyä sovelluksessasi, vähentää boilerplate-koodin määrää ja tarkistaa SQL-kyselyt kääntämisaikana.

  • SQL-kyselyjen tarkistaminen kääntämisaikana. jokainen @Query ja @Entity tarkistetaan kääntämisaikana, mikä säilyttää sovelluksesi kaatumisongelmilta ajonaikana, eikä se tarkista vain pelkkää syntaksia vaan myös puuttuvat taulukot.
  • Boilerplate-koodi
  • Helppo integroitavissa muihin Architecture-komponentteihin (kuten LiveData)

Suurimmat SQLite-käytön ongelmat ovat

  • Raaka-SQL-kyselyjen kääntämisaikaista tarkistusta ei ole. Jos esimerkiksi kirjoitat SQL-kyselyn, jossa on väärä sarakkeen nimi, jota ei ole olemassa todellisessa tietokannassa, se antaa poikkeuksen suoritusaikana, eikä tätä ongelmaa voi havaita kääntämisen aikana.
  • Kun skeema muuttuu, sinun on päivitettävä kyseiset SQL-kyselyt manuaalisesti. Tämä prosessi voi olla aikaa vievä ja virhealtis.
  • Sinun täytyy käyttää paljon boilerplate-koodia SQL-kyselyjen ja Java-tieto-objektien (POJO) väliseen muuntamiseen.

Room vs SQLite

Room on ORM, Object Relational Mapping -kirjasto. Toisin sanoen Room kartoittaa tietokantaobjektejamme Java-objekteiksi. Room tarjoaa SQLiten päälle abstraktiokerroksen, joka mahdollistaa sujuvan tietokantakäytön samalla kun se hyödyntää SQLiten koko tehon.

Ero SQLiten ja Room persistenssikirjaston välillä:-

  • SQLiten tapauksessa SQLiten raakojen SQLite-kyselyjen käännösaikaista tarkistusta ei ole. Mutta Roomissa on SQL-validointi kääntämisaikana.
  • Tarvitaan paljon boilerplate-koodia SQL-kyselyjen ja Java-tieto-objektien väliseen muuntamiseen. Mutta Room kartoittaa tietokantaobjektejamme Java-objekteiksi ilman boilerplate-koodia.
  • Kun skeema muuttuu, sinun on päivitettävä kyseiset SQL-kyselyt manuaalisesti. Room ratkaisee tämän ongelman.
  • Room on rakennettu toimimaan LiveDatan ja RxJavan kanssa tietojen havainnointia varten, kun taas SQLite ei.
Room on mahtava

Room DB:n komponentit

Roomissa on kolme pääkomponenttia Room DB :

  • Entity
  • Dao
  • Database

Entity

Kuvastaa taulua tietokannassa. Room luo taulukon jokaiselle luokalle, jolla on @Entity merkintä, luokan kentät vastaavat taulukon sarakkeita. Siksi entiteettiluokat ovat yleensä pieniä malliluokkia, jotka eivät sisällä mitään logiikkaa.

Entiteettien annotaatiot

Ennen kuin aloitamme entiteettiemme mallintamisen, meidän on tunnettava muutamia hyödyllisiä annotaatioita ja niiden attribuutteja.

@Entity – jokaisella malliluokalla, jossa on tämä annotaatio, on DB:ssä kartoitustaulu

  • foreignKeys – vierasavainten nimet
  • indeksit – luettelo taulun merkinnöistä
  • primaryKeys – entiteettien ensiöavainten nimet
  • taulukkonimi

@PrimaryKey – nimensä mukaisesti, tämä merkintä osoittaa olion ensisijaisen avaimen. autoGenerate – jos arvoksi asetetaan true, SQLite luo sarakkeelle yksilöllisen tunnuksen

@PrimaryKey(autoGenerate = true)

@ColumnInfo – mahdollistaa mukautettujen tietojen antamisen sarakkeesta

@ColumnInfo(name = "column_name")

@Ignore – kenttää ei säilytetä huoneessa

@Embededed – sisäkkäisiin kenttiin voidaan viitata suoraan SQL-kyselyissä.

Dao

DAO:t ovat vastuussa tietokantaan pääsevien metodien määrittelystä. Alkuperäisessä SQLitessä käytetään Cursor-objekteja. Roomissa emme tarvitse kaikkea Cursor:iin liittyvää koodia, vaan voimme yksinkertaisesti määritellä kyselyt käyttäen annotaatioita Dao-luokassa.

Database

Sisältää tietokannan haltijan ja toimii pääasiallisena käyttöpisteenä sovelluksen taustalla olevalle yhteydelle persistoituneeseen, relationaaliseen dataan.

Tietokannan luomiseksi meidän on määriteltävä abstrakti luokka, joka laajentaa luokkaa RoomDatabase. Tämä luokka on annotoitu @Database:lla, siinä luetellaan tietokannan sisältämät oliot ja DAO:t, jotka käyttävät niitä.

Luokan, joka on annotoitu @Database:lla, tulisi täyttää seuraavat ehdot:

  • Ole abstrakti luokka, joka laajentaa RoomDatabase.
  • Sisältää annotaatioon sisältyvän luettelon tietokantaan liittyvistä olioista.
  • Sisältää abstraktin metodin, jolla on 0 argumenttia ja joka palauttaa luokan, joka on annotoitu @Dao:llä.

Ajoaikana voit hankkia Database:n instanssin kutsumalla Room.databaseBuilder():tä tai Room.inMemoryDatabaseBuilder(). Avaa sovelluksesi tai moduulisi build.gradle-tiedosto ja lisää riippuvuudet:

Vaihe 2: Luo malliluokka

Room luo taulukon jokaiselle luokalle, joka on merkitty merkinnällä @Entity; luokan kentät vastaavat taulukon sarakkeita. Siksi olioluokat ovat yleensä pieniä malliluokkia, jotka eivät sisällä mitään logiikkaa. Meidän Person-luokkamme edustaa tietokannassa olevien tietojen mallia. Päivitetään se siis kertomaan Roomille, että sen pitäisi luoda tähän luokkaan perustuva taulukko:

  • Annotoi luokka @Entity-merkinnällä ja käytä tableName-ominaisuutta asettaaksesi taulukon nimen.
  • Määritä ensisijainen avain lisäämällä @PrimaryKey-merkintä oikeisiin kenttiin – tapauksessamme tämä on Käyttäjän tunnus.
  • Määritä luokan kenttien sarakkeiden nimet @ColumnInfo(name = "column_name")-merkinnän avulla. Voit vapaasti ohittaa tämän vaiheen, jos kentilläsi on jo oikea sarakkeen nimi.
  • Jos useampi konstruktori on sopiva, lisää @Ignore-annotaatio kertomaan Roomille, mitä käytetään ja mitä ei.

Vaihe 3: Luo datan käyttöobjektit (Data Access Objects, DAO:t)

DAO:iden vastuulla on tietokantaan pääsevien metodien määrittäminen. Tämä luokka on annotoitu @Database:lla, siinä luetellaan tietokannan sisältämät oliot ja DAO:t, jotka käyttävät niitä.

Step 4: Tiedonhallinta

Tiedon hallitseminen edellyttää ensinnäkin tietokannan instanssin luomista.

Sitten voimme lisätä, poistaa ja päivittää tietokannan.

Varmista, että kaikki operaatiot on suoritettava eri säikeessä. Omassa tapauksessani käytän Executeria (katso tästä)

Query:

Insert:

Delete:

Update:

Suorittaminen Executerilla

Olen myös linkittänyt repon, jos haluat nähdä esimerkin Room Database.

Jätä kommentti