0Pricing
Android Academy · Lektion

Abfragen und Beziehungen

Fragen Sie Daten ab und verknüpfen Sie Entitäten.

Abfragen und Beziehungen ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. 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 4 Lektionen.

Über eine einzelne Tabelle hinaus

Echte Apps enthalten zusammengehörige Daten: Ein Benutzer hat viele Beiträge, eine Bestellung hat viele Artikel. Room modelliert dies mit Fremdschlüsseln und der Annotation @Relation.

Parametrisierte Abfragen

Übergeben Sie Argumente mit einem vorangestellten Doppelpunkt an eine @Query.

@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>

Aggregierte Werte zurückgeben

Abfragen können skalare Werte wie Zählungen zurückgeben.

@Query("SELECT COUNT(*) FROM users")
suspend fun count(): Int

Einen Fremdschlüssel definieren

Eine untergeordnete Entity verweist mit @ForeignKey auf ihre übergeordnete Entity. Dadurch wird die referenzielle Integrität auf Datenbankebene erzwungen.

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["id"],
        childColumns = ["userId"]
    )]
)
data class Post(
    @PrimaryKey val id: Int,
    val userId: Int,
    val title: String
)

Fremdschlüssel indizieren

Room empfiehlt, Fremdschlüsselspalten für eine bessere Abfrageleistung zu indizieren. Fügen Sie einen @Index hinzu.

@Entity(
    indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)

onDelete-Verhalten

Legen Sie fest, was mit untergeordneten Datensätzen geschieht, wenn ein übergeordneter Datensatz gelöscht wird, beispielsweise mit CASCADE, um sie ebenfalls zu löschen.

ForeignKey(
    entity = User::class,
    parentColumns = ["id"],
    childColumns = ["userId"],
    onDelete = ForeignKey.CASCADE
)

Eine Eins-zu-viele-Beziehung modellieren

Erstellen Sie eine Klasse, die eine übergeordnete Entity mit ihren untergeordneten Entities über @Embedded und @Relation kombiniert.

data class UserWithPosts(
    @Embedded val user: User,
    @Relation(
        parentColumn = "id",
        entityColumn = "userId"
    )
    val posts: List<Post>
)

Die Beziehung abfragen

Geben Sie die kombinierte Klasse aus einem DAO zurück. Room führt die zusätzliche Abfrage aus und setzt die Objekte zusammen.

@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>

Warum hier @Transaction

Da Room zwei Abfragen ausführt (zuerst die übergeordneten Datensätze, dann die untergeordneten), stellt das Umschließen der Methode mit @Transaction eine konsistente Momentaufnahme ohne dazwischenliegende Schreibvorgänge sicher.

Viele-zu-viele-Beziehungen mit einer Junction-Tabelle

Für Viele-zu-viele-Beziehungen (Studierende und Kurse) verwenden Sie eine Junction-Tabelle und den Parameter associateBy von @Relation.

@Relation(
    parentColumn = "studentId",
    entityColumn = "courseId",
    associateBy = Junction(Enrollment::class)
)
val courses: List<Course>

Zusammenfassung der Beziehungen

  • @ForeignKey erzwingt Integritäts- und Cascade-Regeln.
  • @Relation + @Embedded setzen verknüpfte Objekte zusammen.
  • @Transaction hält Lesevorgänge über mehrere Abfragen hinweg konsistent.

Schnelltest

Testen Sie Ihr Verständnis von Beziehungen.

Zusammenfassung

Sie haben gelernt:

  • Parametrisieren Sie Abfragen mit :name und geben Sie Aggregate zurück.
  • @ForeignKey erzwingt die Integrität mithilfe von onDelete-Regeln.
  • @Relation + @Embedded erstellen verknüpfte Objekte; umschließen Sie Lesevorgänge mit @Transaction.

Häufig gestellte Fragen

Ist die Lektion „Abfragen und Beziehungen“ kostenlos?

Ja — der vollständige Text von „Abfragen und Beziehungen“ 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 4 Lektionen.

Was lerne ich in „Abfragen und Beziehungen“?

Fragen Sie Daten ab und verknüpfen Sie Entitäten. 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 3 von 4.

Wie lange dauert die Lektion „Abfragen und Beziehungen“?

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. Entitäten und DAOs
  2. Die Room-Datenbankklasse
  3. Abfragen und Beziehungen
  4. Daten mit Flow beobachten
← Zurück zu Android Academy