Používání databáze místností | Android Jetpack

Ashish Rawat

Sledovat

23. února, 2019 – 6 minut čtení

.

Pro ty z vás, kteří nevědí, co je to Android Jetpack, pak

Android Jetpack je kolekce softwarových komponent pro Android, která vám usnadní vývoj skvělých aplikací pro Android.
Pomohou vám

  • Dodržovat osvědčené postupy
  • Osvobodí vás od psaní šablonového kódu.
  • Zjednoduší složité úlohy, takže se můžete soustředit na kód, na kterém vám záleží.

Tady je video z kanálu Android Developers:

Nyní si povíme o knihovně Room

Room je knihovna pro perzistenci, součást balíčku Android Jetpack.

Tady je video z kanálu Android Developers Channel:

Room poskytuje abstrakční vrstvu nad SQLite, která umožňuje plynulý přístup k databázi a zároveň využívá plný výkon SQLite.

Room je nyní považován za lepší přístup k perzistenci dat než SQLiteDatabase. Usnadňuje práci s objekty SQLiteDatabase ve vaší aplikaci, snižuje množství kotelního kódu a ověřuje dotazy SQL v době kompilace.

  • Ověřování dotazů SQL v době kompilace. každý @Query a @Entity je kontrolován v době kompilace, což chrání vaši aplikaci před problémy s pádem za běhu a nejenže kontroluje pouze syntaxi, ale také chybějící tabulky.
  • Kód šablony
  • Snadná integrace s dalšími komponentami architektury (jako LiveData)

Hlavní problémy s použitím SQLite jsou

  • Neexistuje žádné ověřování surových dotazů SQL při kompilaci. Například pokud napíšete SQL dotaz se špatným názvem sloupce, který v reálné databázi neexistuje, pak se při běhu zobrazí výjimka a tento problém nelze zachytit při kompilaci.
  • Při změně schématu musíte dotčené SQL dotazy aktualizovat ručně. Tento proces může být časově náročný a náchylný k chybám.
  • K převodu mezi dotazy SQL a datovými objekty v jazyce Java (POJO) musíte použít spoustu šablonového kódu.

Room vs SQLite

Room je knihovna ORM, Object Relational Mapping. Jinými slovy, Room bude mapovat naše databázové objekty na objekty Javy. Room poskytuje abstrakční vrstvu nad SQLite, která umožňuje plynulý přístup k databázi a zároveň využívá plný výkon SQLite.

Rozdíl mezi SQLite a knihovnou pro perzistenci Room:-

  • V případě SQLite nedochází k ověření surových dotazů SQLite při kompilaci. V případě knihovny Room však existuje ověřování SQL v době kompilace.
  • K převodu mezi dotazy SQL a datovými objekty v jazyce Java je třeba použít spoustu kódu boilerplate. Ale Room mapuje naše databázové objekty na objekty Javy bez kotlíkového kódu.
  • Při změně schématu musíte dotčené dotazy SQL aktualizovat ručně. Room tento problém řeší.
  • Room je vytvořen pro spolupráci s LiveData a RxJava pro pozorování dat, zatímco SQLite nikoli.

Room je úžasný

Komponenty Room DB

Room má tři hlavní komponenty Room DB :

  • Entita
  • Dao
  • Databáze

Entita

Představuje tabulku v rámci databáze. Room vytvoří tabulku pro každou třídu, která má @Entity anotaci, pole ve třídě odpovídají sloupcům v tabulce. Proto bývají třídy entit malými modelovými třídami, které neobsahují žádnou logiku.

Anotace entit

Než začneme modelovat naše entity, musíme znát některé užitečné anotace a jejich atributy.

@Entity – každá modelová třída s touto anotací bude mít v DB mapovací tabulku

  • foreignKeys – názvy cizích klíčů
  • indices – seznam indicií v tabulce
  • primaryKeys – názvy primárních klíčů entit
  • tableName

@PrimaryKey – jak napovídá její název, tato anotace označuje primární klíč entity. autoGenerate – pokud je nastaveno na true, pak SQLite bude generovat jedinečné id pro sloupec

@PrimaryKey(autoGenerate = true)

@ColumnInfo – umožňuje zadat vlastní informace o sloupci

@ColumnInfo(name = "column_name")

@Ignore – pole nebude perzistovat u Room

@Embeded – na vnořená pole lze odkazovat přímo v SQL dotazech.

Dao

DAO jsou zodpovědné za definování metod, které přistupují k databázi. V původním SQLite používáme objekty Cursor. Díky Roomu nepotřebujeme veškerý kód související s Cursor a můžeme jednoduše definovat naše dotazy pomocí anotací ve třídě Dao.

Databáze

Obsahuje držitele databáze a slouží jako hlavní přístupový bod pro základní připojení k perzistovaným, relačním datům vaší aplikace.

Pro vytvoření databáze musíme definovat abstraktní třídu, která rozšiřuje RoomDatabase. Tato třída je anotována @Database, obsahuje seznam entit obsažených v databázi a DAO, které k nim přistupují.

Třída, která je anotována @Database, by měla splňovat následující podmínky:

  • Být abstraktní třídou, která rozšiřuje RoomDatabase.
  • V rámci anotace obsahovat seznam entit spojených s databází.
  • Obsahovat abstraktní metodu, která má 0 argumentů a vrací třídu, která je anotována pomocí @Dao.

V době běhu můžete získat instanci třídy Database voláním Room.databaseBuilder() neboRoom.inMemoryDatabaseBuilder().

Krok 1: Přidání závislostí Gradle

  1. Pro přidání do projektu otevřete soubor build.gradle na úrovni projektu a přidejte zvýrazněný řádek, jak je uvedeno níže:

2. Klepněte na tlačítko „Přidat“. Otevřete soubor build.gradle pro svou aplikaci nebo modul a přidejte závislosti:

Krok 2: Vytvoření modelové třídy

Room vytvoří pro každou třídu s anotací @Entity tabulku; pole ve třídě odpovídají sloupcům v tabulce. Třídy entit proto bývají malé modelové třídy, které neobsahují žádnou logiku. Naše třída Person představuje model pro data v databázi. Aktualizujme ji tedy a řekněme Roomu, že má na základě této třídy vytvořit tabulku:

  • Anotujte třídu pomocí @Entity a pomocí vlastnosti tableName nastavte název tabulky.
  • Nastavte primární klíč přidáním anotace @PrimaryKey do správných polí – v našem případě je to ID uživatele.
  • Nastavte název sloupců pro pole třídy pomocí anotace @ColumnInfo(name = "column_name"). Tento krok klidně přeskočte, pokud vaše pole již mají správný název sloupce.
  • Pokud je vhodných více konstruktorů, přidejte anotaci @Ignore, která Roomu řekne, které se mají použít a které ne.

Krok 3: Vytvoření objektů přístupu k datům (DAO)

DAO jsou zodpovědné za definování metod, které přistupují k databázi.

Pro vytvoření DAO musíme vytvořit rozhraní a anotovat je pomocí @Dao .

Krok 4 – Vytvoření databáze

Pro vytvoření databáze musíme definovat abstraktní třídu, která rozšiřuje RoomDatabase. Tato třída je opatřena anotací @Database, obsahuje seznam entit obsažených v databázi a DAO, které k nim přistupují.

Krok 4 – Správa dat

Pro správu dat musíme nejprve vytvořit instanci databáze.

poté můžeme vkládat mazat a aktualizovat databázi.

Ujistěte se, že všechny operace by se měly provádět v jiném vlákně. V mém případě používám Executers (viz zde)

Query:

Insert:

Odstranit:

Aktualizovat:

Provádí se s Executerem

.

Pokud potřebujete vidět příklad Room Database, dal jsem sem i odkaz na repo.

Napsat komentář