Postgres
Introducció
Per a aquesta activitat tens aquest projecte d’ajuda: https://gitlab.com/xtec/kotlin/postgres/
Entorn de treball
Crea un projecte:
> mkdir postgres
> cd postgres
> gradle init --package dev.xtec --project-name postgres --java-version 21 --type kotlin-application --dsl kotlin --test-framework kotlintest --no-split-project --no-incubating --overwriteModifica el fitxer app/build.gradle.kts:
plugins {
id("app.cash.sqldelight") version "2.0.2"
// ...
}
dependencies {
implementation("app.cash.sqldelight:jdbc-driver:2.0.2")
implementation("com.zaxxer:HikariCP:6.2.1")
implementation("io.github.cdimascio:dotenv-kotlin:6.5.0")
implementation("org.postgresql:postgresql:42.5.0")
implementation("org.slf4j:slf4j-reload4j:2.0.16")
// ...
}
sqldelight {
databases {
create("Database") {
packageName.set("dev.xtec.data")
dialect("app.cash.sqldelight:sqlite-3-38-dialect:2.0.2")
}
}
}Afegeix un fitxer log4j.properties al directori app/src/main/resources per configurar slf4j:
# Opció del logger arrel
# Envia els missatges de log a stdout
Configura l’esquema
Crea el directori app/src/main/sqldelight/dev/xtec/data per posar-hi els fitxers .sq
Afegeix un fitxer Customer.sq:
(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT
);
insert:
INSERT INTO customer(name) VALUES (?);
select:
SELECT * FROM customer;Genera el codi d’accés a la base de dades:
> .\gradlew generateSqlInterface Crea el fitxer app/src/main/resources/.env per guardar les dades de configuració de la base de dades (aquest fitxer no ha d’estar versionat):
PG_JDBC_URL = jdbc:postgresql://localhost:5432/acme
PG_USERNAME = postgres
PG_PASSWORD = passwordModifica el fitxer app/src/main/kotlin/dev/xtec/App.kt:
package dev.xtec
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.driver.jdbc.asJdbcDriver
import com.zaxxer.hikari.HikariDataSource
import dev.xtec.data.Database
import io.github.cdimascio.dotenv.dotenv
fun main() {
val dotenv = dotenv()
val driver: SqlDriver = HikariDataSource().apply {
jdbcUrl = dotenv["PG_JDBC_URL"]
driverClassName = "org.postgresql.Driver"
username = dotenv["PG_USERNAME"]
password = dotenv["PG_PASSWORD"]
}.asJdbcDriver()
val database = Database(driver)
Database.Schema.create(driver)
database.customerQueries.insert("Laura")
val customer = database.customerQueries.select().executeAsList().first()
println(customer)
}Base de dades
Arrenca una base de dades tal com s’explica a {% link “/data/postgres/” %}.
Crea una base de dades amb el nom acme.
Executa l’aplicació:
> .\gradlew run
...
Customer(id=1, name=Laura, email=null)Neon
Crea una base de dades a {% link “/cloud/neon/” %}.
A continuació modifica el fitxer .venv amb les dades de connexió de neon.
Per exemple:
Verifica que el codi funciona sense modificar ni una línia de codi.