Arbeit mit Datenbanken in Kotlin: PostgreSQL und MongoDB für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in die Arbeit mit Datenbanken in Kotlin

\n\n

Kotlin ist eine moderne, statisch typisierte Sprache, die auf der JVM läuft und aufgrund ihrer Prägnanz und Sicherheit rasant an Beliebtheit gewinnt. Eine der Schlüsselqualifikationen für jeden Entwickler ist die Fähigkeit, mit Datenbanken zu interagieren. In diesem Artikel werden wir untersuchen, wie man eine Verbindung herstellt und grundlegende Operationen (CRUD) mit den beiden beliebtesten Datenbanktypen durchführt: der relationalen PostgreSQL und der dokumentenorientierten MongoDB.

\n\n

Wir werden moderne Bibliotheken verwenden, die optimal an idiomatisches Kotlin angepasst sind:

\n
    \n
  • Exposed – ORM-Framework von JetBrains für SQL-Datenbanken (PostgreSQL, MySQL u.a.).
  • \n
  • KMongo – reaktiver ODM-Client für MongoDB, basierend auf Koroutinen.
  • \n
\n\n

Der Artikel richtet sich an Anfänger: Wir werden die Projekteinrichtung, die Verbindung zur Datenbank und einfache Beispiele zum Einfügen, Lesen, Aktualisieren und Löschen von Daten durchgehen.

\n\n

1. Projekteinrichtung und Hinzufügen von Abhängigkeiten

\n\n

Erstellen Sie zunächst ein neues Kotlin-Projekt (z.B. über IntelliJ IDEA mit Gradle oder Maven). Fügen Sie die erforderlichen Abhängigkeiten in die Datei build.gradle.kts ein.

\n\n

Gradle-Abhängigkeiten für PostgreSQL (Exposed)

\n
dependencies {\n    // Exposed\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-jdbc:0.44.1")\n\n    // PostgreSQL-Treiber\n    implementation("org.postgresql:postgresql:42.7.1")\n\n    // Verbindungspool (HikariCP)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n}
\n\n

Gradle-Abhängigkeiten für MongoDB (KMongo)

\n
dependencies {\n    // KMongo (mit Koroutinen)\n    implementation("org.litote.kmongo:kmongo-coroutine:4.11.0")\n\n    // Ktor Client (falls reaktiver Treiber benötigt wird)\n    implementation("org.litote.kmongo:kmongo-async:4.11.0")\n}
\n\n

Nach der Synchronisierung des Projekts kann mit der Verbindung begonnen werden.

\n\n

2. Arbeiten mit PostgreSQL über Exposed

\n\n

Exposed bietet zwei Ansätze: DSL (typsichere SQL-Abfragen) und DAO (objektrelationale Abbildung). Wir werden DAO betrachten – es ist für Anfänger intuitiver.

\n\n

Verbindung zur Datenbank

\n
import org.jetbrains.exposed.sql.Database\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\n\nfun connectToPostgres() {\n    val config = HikariConfig().apply {\n        jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"\n        driverClassName = "org.postgresql.Driver"\n        username = "user"\n        password = "password"\n        maximumPoolSize = 10\n    }\n    val dataSource = HikariDataSource(config)\n    Database.connect(dataSource)\n    println("Verbindung zu PostgreSQL hergestellt!")\n}
\n\n

Definition der Tabelle und Entität

\n
import org.jetbrains.exposed.dao.id.IntIdTable\nimport org.jetbrains.exposed.dao.IntEntity\nimport org.jetbrains.exposed.dao.IntEntityClass\n\n// Tabelle definieren\nobject UsersTable : IntIdTable("users") {\n    val name = varchar("name", 100)\n    val email = varchar("email", 255).uniqueIndex()\n    val age = integer("age").default(18)\n}\n\n// Entity definieren (DAO)\nclass UserEntity(id: EntityID<Int>) : IntEntity(id) {\n    companion object : IntEntityClass<UserEntity>(UsersTable)\n\n    var name by UsersTable.name\n    var email by UsersTable.email\n    var age by UsersTable.age\n}
\n\n

CRUD-Operationen

\n
fun performCRUD() {\n    transaction {\n        // Tabelle erstellen (falls nicht vorhanden)\n        SchemaUtils.create(UsersTable)\n\n        // INSERT\n        val newUser = UserEntity.new {\n            name = "Ivan Petrov"\n            email = "ivan@example.com"\n            age = 25\n        }\n        println("Benutzer erstellt: $newUser")                

Blogs

Buchempfehlungen