Postgres
Introducción
Section titled “Introducción”Para esta actividad tienes este proyecto de ayuda: https://gitlab.com/xtec/kotlin/postgres/
Entorno de trabajo
Section titled “Entorno de trabajo”Crea un proyecto:
> 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 --overwrite
Modifica el fichero 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") } }}
Añade un fichero log4j.properties
en el directorio app/src/main/resources
para configurar slf4j:
# Root logger optionlog4j.rootLogger=INFO, stdout# Direct log messages to stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Configura el esquema
Section titled “Configura el esquema”Crea el directorio app/src/main/sqldelight/dev/xtec/data
para poner los ficheros .sq
Añade un fichero Customer.sq
:
CREATE TABLE IF NOT EXISTS customer ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT);
insert:INSERT INTO customer(name) VALUES (?);
select:SELECT * FROM customer;
Genera el código de acceso a la base de datos:
> .\gradlew generateSqlInterface
Crea el fichero app/src/main/resources/.env
para guardar los datos de configuración de la base de datos (este fichero no tiene que estar versionado):
PG_JDBC_URL = jdbc:postgresql://localhost:5432/acmePG_USERNAME = postgresPG_PASSWORD = password
Modifica el fichero app/src/main/kotlin/dev/xtec/App.kt
:
package dev.xtec
import app.cash.sqldelight.db.SqlDriverimport app.cash.sqldelight.driver.jdbc.asJdbcDriverimport com.zaxxer.hikari.HikariDataSourceimport dev.xtec.data.Databaseimport 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 datos
Section titled “Base de datos”Arranca una base de datos tal com se explica en {% link “/data/postgres/” %}.
Crea una base de datos con el nombre de acme
.
Ejecuta la aplicación:
> .\gradlew run...
Customer(id=1, name=Laura, email=null)
Crea una base de datos en {% link “/data/postgres/neon/” %}.
A continuación modifica el fichero .venv
con los datos de conexión de neon.
Por ejemplo:
PG_JDBC_URL = jdbc:postgresql://ep-ancient-recipe-a9qwtikr.gwc.azure.neon.tech/salesPG_USERNAME = sales_ownerPG_PASSWORD = npg_pnZrJxz87UiC
Verifica que el codigo funciona sin modificar ninguna linea de código.