Was ist Room und warum wird es benötigt?
\n\nRoom ist eine Bibliothek für die Arbeit mit Datenbanken in Android-Apps, die in Kotlin oder Java geschrieben sind. Sie bietet eine Abstraktionsebene über SQLite und ermöglicht die Arbeit mit der Datenbank über einen objektorientierten Ansatz anstelle von rohen SQL-Abfragen.
\n\nDie wichtigsten Vorteile von Room:
\n- \n
- Minimierung von Boilerplate-Code — Room generiert automatisch Code für die Arbeit mit SQLite basierend auf Annotationen. \n
- Überprüfung von SQL-Abfragen zur Kompilierzeit — Fehler in Abfragen werden vor dem Start der App erkannt. \n
- Integration mit Coroutines und Flow — Unterstützung für reaktive Programmierung und asynchrone Operationen. \n
- Datenbankmigrationen — integrierte Mechanismen zum Aktualisieren des Schemas ohne Datenverlust. \n
- TypeConverters — Möglichkeit, komplexe Datentypen (z. B. Date, List) in der Datenbank zu speichern. \n
Room ist ideal für Apps, die eine lokale Speicherung strukturierter Daten benötigen: Notizen, Cache, Benutzereinstellungen, Offline-Modus usw.
\n\nInstallation von Room
\n\nRoom wird nicht über pip oder npm installiert, da es eine Bibliothek für Android ist. Das Hinzufügen zum Projekt erfolgt über die Datei build.gradle (auf Modulebene).
Schritt 1: Fügen Sie das KSP-Plugin (Kotlin Symbol Processing) hinzu
\nFügen Sie im root-build.gradle das KSP-Plugin hinzu:
plugins {\n id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false\n}\n\nSchritt 2: Binden Sie Room im App-Modul ein
\nFügen Sie in der build.gradle des app-Moduls Folgendes hinzu:
plugins {\n id 'com.android.application'\n id 'org.jetbrains.kotlin.android'\n id 'com.google.devtools.ksp'\n}\n\nandroid {\n // ... Ihre Konfiguration\n}\n\ndependencies {\n def room_version = "2.6.1"\n\n implementation "androidx.room:room-runtime:$room_version"\n ksp "androidx.room:room-compiler:$room_version"\n implementation "androidx.room:room-ktx:$room_version" // Für Coroutines\n}\n\nNach der Gradle-Synchronisation ist die Bibliothek einsatzbereit.
\n\nSchnellstart mit einem Codebeispiel
\n\nWir erstellen eine einfache App zum Speichern einer Aufgabenliste (Todo).
\n\nSchritt 1: Definieren Sie die Entität (Entity)
\nimport androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = "tasks")\ndata class Task(\n @PrimaryKey(autoGenerate = true)\n val id: Int = 0,\n val title: String,\n val description: String,\n val isCompleted: Boolean = false\n)\n\nSchritt 2: Erstellen Sie das DAO (Data Access Object)
\nimport androidx.room.*\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\ninterface TaskDao {\n @Query("SELECT * FROM tasks ORDER BY id DESC")\n fun getAllTasks(): Flow<List<Task>>\n\n @Insert\n suspend fun insertTask(task: Task)\n\n @Update\n suspend fun updateTask(task: Task)\n\n @Delete\n suspend fun deleteTask(task: Task)\n}\n\nSchritt 3: Erstellen Sie die Datenbank
\nimport android.content.Context\nimport androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\n\n@Database(entities = [Task::class], version = 1)\nabstract class AppDatabase : RoomDatabase() {\n abstract fun taskDao(): TaskDao\n\n companion object {\n @Volatile\n private var INSTANCE: AppDatabase? = null\n\n fun getDatabase(context: Context): AppDatabase {\n return INSTANCE ?: synchronized(this) {\n val instance = Room.databaseBuilder(\n context.applicationContext,\n AppDatabase::class.java,\n "app_database"\n ).build()\n INSTANCE = instance\n instance\n }\n }\n }\n}\n\nSchritt 4: Verwenden Sie
Auch in der Bibliothek
WebSocket-Bibliothek Kotlin: ktor-client-websockets für Echtzeit
Nodemailer für JavaScript (Node.js): Komplettguide mit Beispielen
WebSocket-Bibliothek Ratchet für PHP: Echtzeit-Anwendungen auf der Website
Swagger/OpenAPI-Generierung für Rust: Utoipa-Bibliothek
Testcontainers .NET für C# (.NET): Komplettguide mit Praxisbeispielen