0Pricing
Android Academy · Lekcja

Klasa bazy danych Room

Utwórz bazę danych i uzyskaj do niej dostęp

Klasa bazy danych Room to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Połączenie wszystkich elementów

Klasa bazy danych jest głównym punktem dostępu. Wymienia encje, określa wersję i udostępnia obiekty DAO.

Adnotacja @Database

Utwórz klasę abstrakcyjną dziedziczącą po RoomDatabase i oznacz ją adnotacją @Database.

import androidx.room.Database
import androidx.room.RoomDatabase

@Database(
    entities = [User::class],
    version = 1
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Wymienianie encji i wersji

Tablica entities informuje Room, które tabele należy utworzyć. Numer version śledzi zmiany schematu na potrzeby migracji.

Udostępnianie obiektów DAO

Dla każdego DAO zadeklaruj funkcję abstrakcyjną zwracającą jego typ. Room ją zaimplementuje.

abstract fun userDao(): UserDao
abstract fun noteDao(): NoteDao

Tworzenie bazy danych

Użyj Room.databaseBuilder, aby utworzyć instancję. Potrzebuje ona kontekstu aplikacji, klasy i nazwy bazy danych.

val db = Room.databaseBuilder(
    context.applicationContext,
    AppDatabase::class.java,
    "app.db"
).build()

Utworzenie singletonu

Tworzenie bazy danych jest kosztowne, dlatego utwórz jedną instancję dla całej aplikacji. Często stosowany wzorzec używa obiektu companion z synchronizowanym getterem.

companion object {
    @Volatile private var INSTANCE: AppDatabase? = null
    fun get(context: Context): AppDatabase =
        INSTANCE ?: synchronized(this) {
            INSTANCE ?: build(context).also { INSTANCE = it }
        }
}

Dlaczego singleton ma znaczenie

Wiele instancji bazy danych otworzyłoby wiele połączeń z tym samym plikiem, powodując niespójność i niepotrzebne zużycie pamięci. Jedna współdzielona instancja zapewnia jedno źródło prawdy.

Udostępnianie za pomocą Hilt

W rzeczywistych aplikacjach bazę danych zwykle udostępnia się za pomocą wstrzykiwania zależności (omówionego w kursie Hilt), a nie ręcznie utworzonego singletonu.

@Provides
@Singleton
fun provideDb(@ApplicationContext ctx: Context) =
    Room.databaseBuilder(ctx, AppDatabase::class.java, "app.db")
        .build()

Zmiany schematu i migracje

Po zmianie encji zwiększ wartość version i dostarcz obiekt Migration opisujący polecenia SQL przekształcające stare dane.

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(db: SupportSQLiteDatabase) {
        db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER NOT NULL DEFAULT 0")
    }
}

Migracja destrukcyjna

Podczas wczesnego etapu tworzenia aplikacji możesz użyć fallbackToDestructiveMigration(), która usuwa i ponownie tworzy tabele zamiast przeprowadzać migrację. Nigdy nie używaj jej w produkcji, jeśli baza zawiera prawdziwe dane użytkowników.

Uzyskiwanie dostępu do obiektów DAO

Po uzyskaniu instancji bazy danych pobierz obiekt DAO i wywołuj jego metody wewnątrz korutyny.

val dao = db.userDao()
viewModelScope.launch {
    dao.insert(User(1, "Ada", "ada@x.com"))
}

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat klasy bazy danych.

Podsumowanie

Nauczyłeś się:

  • @Database wymienia encje, ustawia wersję i udostępnia obiekty DAO.
  • Tworzyć bazę za pomocą Room.databaseBuilder jako singleton.
  • Zmiany schematu wymagają zwiększenia wersji i dostarczenia obiektu Migration.

Często zadawane pytania

Czy lekcja „Klasa bazy danych Room” jest bezpłatna?

Tak — pełny tekst „Klasa bazy danych Room” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Klasa bazy danych Room”?

Utwórz bazę danych i uzyskaj do niej dostęp Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Klasa bazy danych Room”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Encje i DAO
  2. Klasa bazy danych Room
  3. Zapytania i relacje
  4. Obserwowanie danych za pomocą Flow
← Powrót do Android Academy