0Pricing
Android Academy · Lektion

Room-Datenbank

Speichern Sie strukturierte Daten lokal mit Room. Definieren Sie Entities, DAOs und die Database-Klasse. Fragen Sie Daten mit SQL ab und beobachten Sie Ergebnisse mit LiveData oder Flow.

Room-Datenbank ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 6. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.

Was ist Room?

Room ist Googles empfohlene Persistenzbibliothek für Android. Sie ist eine Abstraktion über SQLite und bietet Ihnen:

  • Typsichere SQL-Abfragen, die zur Kompilierzeit überprüft werden
  • Unterstützung für Kotlin-Coroutines
  • Integration mit LiveData / Flow
  • Unterstützung für Migrationen bei Schemaänderungen

Die drei Komponenten von Room

Room besteht aus drei Annotationen:

  • @Entity — eine data class, die einer Datenbanktabelle zugeordnet wird
  • @Dao (Data Access Object) — ein Interface mit SQL-Abfragen
  • @Database — die zentrale Datenbankklasse, die alles miteinander verbindet

Room-Abhängigkeiten hinzufügen

Fügen Sie Room zu app/build.gradle hinzu:

// app/build.gradle
plugins {
    id 'kotlin-kapt'  // needed for Room annotation processor
}

dependencies {
    val roomVersion = "2.6.1"
    implementation "androidx.room:room-runtime:$roomVersion"
    kapt "androidx.room:room-compiler:$roomVersion"
    implementation "androidx.room:room-ktx:$roomVersion" // coroutine support
}

Eine Entity definieren

Annotieren Sie eine data class mit @Entity, um eine Datenbanktabelle zu erstellen:

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "notes")
data class Note(
    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,
    val title: String,
    val body: String,
    val createdAt: Long = System.currentTimeMillis()
)

// Each field = one column in the database table
// @PrimaryKey autoGenerate = Room assigns the id automatically

DAO erstellen

Definieren Sie Abfragen in einem DAO-Interface. Room generiert die Implementierung für Sie:

import androidx.room.*
import kotlinx.coroutines.flow.Flow

@Dao
interface NoteDao {

    @Query("SELECT * FROM notes ORDER BY createdAt DESC")
    fun getAllNotes(): Flow<List<Note>>  // emits new list whenever data changes

    @Query("SELECT * FROM notes WHERE id = :noteId")
    suspend fun getNoteById(noteId: Int): Note?

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(note: Note)

    @Update
    suspend fun update(note: Note)

    @Delete
    suspend fun delete(note: Note)
}

Datenbank erstellen

Die Klasse @Database ist der Einstiegspunkt für Room. Erstellen Sie sie einmal und bewahren Sie sie als Singleton auf:

import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import android.content.Context

@Database(entities = [Note::class], version = 1, exportSchema = false)
abstract class NoteDatabase : RoomDatabase() {

    abstract fun noteDao(): NoteDao

    companion object {
        @Volatile private var INSTANCE: NoteDatabase? = null

        fun getInstance(context: Context): NoteDatabase {
            return INSTANCE ?: synchronized(this) {
                Room.databaseBuilder(
                    context.applicationContext,
                    NoteDatabase::class.java,
                    "note_database"
                ).build().also { INSTANCE = it }
            }
        }
    }
}

Room im ViewModel verwenden

Verknüpfen Sie das DAO mithilfe von Coroutines mit einem ViewModel:

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch

class NoteViewModel(private val dao: NoteDao) : ViewModel() {

    val notes = dao.getAllNotes()  // Flow — auto-updates when DB changes

    fun addNote(title: String, body: String) {
        viewModelScope.launch {
            dao.insert(Note(title = title, body = body))
        }
    }

    fun deleteNote(note: Note) {
        viewModelScope.launch {
            dao.delete(note)
        }
    }
}

Room-Daten in der UI beobachten

Sammeln Sie den Flow aus Room in Ihrer Activity oder Ihrem Fragment:

import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch

class NoteActivity : AppCompatActivity() {
    private val viewModel: NoteViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...

        lifecycleScope.launch {
            viewModel.notes.collect { notes ->
                adapter.submitList(notes)  // update RecyclerView
            }
        }
    }
}

Datenbankmigrationen

Wenn Sie Ihre Entity ändern (eine Spalte hinzufügen oder eine Tabelle umbenennen), müssen Sie eine Migration bereitstellen, damit vorhandene Benutzerdaten nicht verloren gehen.

Erhöhen Sie die Versionsnummer in @Database(version = 2) und definieren Sie ein Migration-Objekt mit dem SQL-Code, der das alte Schema in das neue umwandelt.

Schnelltest

Welche Room-Annotation kennzeichnet eine Interface-Methode als SQL-SELECT-Abfrage?

Zusammenfassung: Room-Datenbank

Sie können nun Apps mit lokaler Datenpersistenz erstellen:

  • @Entity — data class → Datenbanktabelle
  • @Dao — Interface mit @Query, @Insert, @Delete
  • @Database — Singleton-Einstiegspunkt
  • Geben Sie für Live-Aktualisierungen Flow<List> aus dem DAO zurück
  • Rufen Sie das DAO mit viewModelScope.launch aus dem ViewModel auf

Als Nächstes: Schreiben Sie asynchronen Code ohne Callbacks mit Coroutines.

Häufig gestellte Fragen

Ist die Lektion „Room-Datenbank“ kostenlos?

Ja — der vollständige Text von „Room-Datenbank“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.

Was lerne ich in „Room-Datenbank“?

Speichern Sie strukturierte Daten lokal mit Room. Definieren Sie Entities, DAOs und die Database-Klasse. Fragen Sie Daten mit SQL ab und beobachten Sie Ergebnisse mit LiveData oder Flow. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 6.

Wie lange dauert die Lektion „Room-Datenbank“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. ViewModel und LiveData
  2. Room-Datenbank
  3. Coroutines und Suspend-Funktionen
  4. Repository-Pattern
  5. Navigation Component
  6. Dependency Injection mit Hilt
← Zurück zu Android Academy