Szoba adatbázis használata | Android Jetpack

Ashish Rawat

Follow

Febr. 23, 2019 – 6 min read

Azoknak, akik nem tudják, mi az Android Jetpack, akkor

Az Android Jetpack egy Android szoftverkomponensekből álló gyűjtemény, amely megkönnyíti a nagyszerű Android alkalmazások fejlesztését.
Segítségükkel

  • A legjobb gyakorlatok követése
  • Mentesíti Önt a boilerplate kód írásától.
  • Egyszerűsíti az összetett feladatokat, így Ön a számára fontos kódra összpontosíthat.

Itt a videó az Android Developers Channelről:

Most beszéljünk a Roomról

A Room egy perszisztencia könyvtár, az Android Jetpack része.

Itt a videó az Android Developers Channelről:

A Room egy absztrakciós réteget biztosít az SQLite felett, hogy lehetővé tegye a folyékony adatbázis-hozzáférést, miközben kihasználja az SQLite teljes erejét.

A Roomot ma már jobb megközelítésnek tartják az adatok perzisztenciájához, mint az SQLiteDatabase-t. Megkönnyíti az SQLiteDatabase objektumokkal való munkát az alkalmazásban, csökkenti a boilerplate kód mennyiségét és az SQL-lekérdezések fordítási időben történő ellenőrzését.

  • Az SQL-lekérdezések fordítási időben történő ellenőrzése. minden @Query és @Entity a fordítási időben kerül ellenőrzésre, ami megóvja az alkalmazást a futási idejű összeomlási problémáktól, és nem csak az egyetlen szintaxist ellenőrzi, hanem a hiányzó táblákat is.
  • Boilerplate kód
  • Egyszerűen integrálható más Architecture komponensekkel (például LiveData)

Az SQLite használatával kapcsolatos főbb problémák

  • Nincs fordítási idejű ellenőrzése a nyers SQL-lekérdezéseknek. Például, ha olyan SQL-lekérdezést írsz egy rossz oszlopnévvel, amely nem létezik a valós adatbázisban, akkor futási időben kivételt ad, és ezt a problémát nem tudod rögzíteni fordítási időben.
  • Amint a séma változik, az érintett SQL-lekérdezéseket manuálisan kell frissítened. Ez a folyamat időigényes és hibakockázatos lehet.
  • Sok boilerplate kódot kell használnia az SQL-lekérdezések és a Java adatobjektumok (POJO) közötti konverzióhoz.

Room vs SQLite

A Room egy ORM, Object Relational Mapping könyvtár. Más szóval a Room leképezi az adatbázis-objektumainkat Java objektumokra. A Room egy absztrakciós réteget biztosít az SQLite felett, hogy lehetővé tegye a gördülékeny adatbázis elérést, miközben kihasználja az SQLite teljes erejét.

Különbség az SQLite és a Room perszisztencia könyvtár között:-

  • Az SQLite esetében nincs fordítási idejű ellenőrzése a nyers SQLite lekérdezéseknek. A Room esetében viszont van SQL-ellenőrzés fordítási időben.
  • Az SQL-lekérdezések és a Java-adatobjektumok közötti konverzióhoz rengeteg boilerplate kódot kell használni. De a Room boilerplate kód nélkül képezi le az adatbázis-objektumainkat Java objektumra.
  • Amint a séma változik, az érintett SQL-lekérdezéseket manuálisan kell frissíteni. A Room megoldja ezt a problémát.
  • A Room úgy van kialakítva, hogy együttműködjön a LiveData és az RxJava adatmegfigyeléssel, míg az SQLite nem.
A Room fantasztikus

A Room DB összetevői

A Room DB-nek három fő összetevője van :

  • Entity
  • Dao
  • Datbázis

Entity

Egy táblát reprezentál az adatbázisban. A Room minden @Entity annotációval rendelkező osztályhoz létrehoz egy táblázatot, az osztály mezői megfelelnek a táblázat oszlopainak. Ezért az entitásosztályok általában kis modellosztályok, amelyek nem tartalmaznak logikát.

Entitások annotációi

Mielőtt elkezdenénk az entitások modellezését, meg kell ismernünk néhány hasznos annotációt és azok attribútumait.

@Entity – minden ezzel az annotációval rendelkező modellosztály rendelkezik egy leképező táblával a DB-ben

  • foreignKeys – az idegen kulcsok neve
  • indices – a táblán található jelek listája
  • primaryKeys – az entitások elsődleges kulcsainak neve
  • tableName

@PrimaryKey – ahogy a neve is mutatja, ez a megjegyzés az entitás elsődleges kulcsára mutat. autoGenerate – ha igazra van állítva, akkor az SQLite egyedi azonosítót generál az oszlophoz

@PrimaryKey(autoGenerate = true)

@ColumnInfo – lehetővé teszi az oszlopra vonatkozó egyéni információk megadását

@ColumnInfo(name = "column_name")

@Ignore – a mezőt a Room

@Embeded – a beágyazott mezőkre közvetlenül lehet hivatkozni az SQL-kérdésekben.

Dao

ADAO-k felelősek az adatbázist elérő metódusok definiálásáért. Az eredeti SQLite-ban a Cursor objektumokat használjuk. A Room segítségével nincs szükségünk az összes Cursor-hoz kapcsolódó kódra, és egyszerűen definiálhatjuk a lekérdezéseinket a Dao osztályban található megjegyzések segítségével.

Adatbázis

Tartalmazza az adatbázis-tartót, és az alkalmazásunk perzisztens, relációs adataihoz való mögöttes kapcsolat fő hozzáférési pontjaként szolgál.

Az adatbázis létrehozásához egy absztrakt osztályt kell definiálnunk, amely kiterjeszti a RoomDatabase osztályt. Ez az osztály a @Database megjegyzéssel van ellátva, felsorolja az adatbázisban található entitásokat és az azokat elérő DAO-kat.

A @Database megjegyzéssel ellátott osztálynak a következő feltételeknek kell megfelelnie:

  • Egy absztrakt osztály legyen, amely kiterjeszti a RoomDatabase-et.
  • Az annotáción belül tartalmazza az adatbázishoz tartozó entitások listáját.
  • Tartalmazzon egy olyan absztrakt metódust, amelynek 0 argumentuma van, és amely a @Dao-vel annotált osztályt adja vissza.

Futásidőben a Room.databaseBuilder() vagy Room.inMemoryDatabaseBuilder() hívásával szerezhetünk egy Database példányt.

1. lépés: A Gradle függőségek hozzáadása

  1. A projekthez való hozzáadáshoz nyissa meg a projektszintű build.gradle fájlt, és adja hozzá a kiemelt sort az alábbiak szerint:

2. lépés. Nyissa meg az alkalmazás vagy modul build.gradle fájlját, és adja hozzá a függőségeket:

2. lépés: Modellosztály létrehozása

A @Entity megjegyzéssel ellátott osztályok mindegyikéhez létrehoz egy táblázatot; az osztály mezői megfelelnek a táblázat oszlopainak. Ezért az entitásosztályok általában kis modellosztályok, amelyek nem tartalmaznak logikát. A Person osztályunk az adatbázisban lévő adatok modelljét képviseli. Frissítsük tehát úgy, hogy megmondjuk a Roomnak, hogy az osztály alapján hozzon létre egy táblát:

  • Adjuk meg az osztályt a @Entity megjegyzéssel, és a tableName tulajdonság segítségével állítsuk be a táblázat nevét.
  • Állítsuk be az elsődleges kulcsot a @PrimaryKey megjegyzés hozzáadásával a megfelelő mezőkhöz – esetünkben ez a Felhasználó azonosítója.
  • Állítsuk be az osztály mezőinek oszlopneveit a @ColumnInfo(name = "column_name") megjegyzéssel. Ezt a lépést nyugodtan kihagyhatjuk, ha a mezőink már rendelkeznek a megfelelő oszlopnévvel.
  • Ha több konstruktor is megfelelő, adjuk hozzá a @Ignore annotációt, hogy megmondjuk a Roomnak, melyiket kell használni és melyiket nem.

3. lépés: Adatelérési objektumok (DAO-k)

A DAO-k felelősek az adatbázishoz hozzáférő módszerek meghatározásáért.

Egy DAO létrehozásához létre kell hoznunk egy interfészt és @Dao megjegyzéssel kell ellátnunk .

4. lépés – Az adatbázis létrehozása

Egy adatbázis létrehozásához egy absztrakt osztályt kell definiálnunk, amely kiterjeszti a RoomDatabase. Ez az osztály a @Database megjegyzést kapja, felsorolja az adatbázisban található entitásokat és az azokat elérő DAO-kat.

4. lépés: Az adatok kezelése

Az adatok kezeléséhez először is létre kell hoznunk az adatbázis egy példányát.

ezután beilleszthetjük a törlést és frissíthetjük az adatbázist.

Minden műveletnek egy másik szálon kell végrehajtódnia. Az én esetemben Executert használok (lásd itt)

Query:

Insert:

Törlés:

Frissítés:

Végrehajtás végrehajtóval

Linkeltem egy repót is, ha szükséged van a szoba adatbázis példájára.

Szólj hozzá!