Ejemplos ejecutables de la UD 9¶
Estos ejemplos están pensados para acompañar la teoría de acceso a bases de datos con Kotlin. Todos usan la misma base de datos H2 en fichero, la recrean con datos semilla al arrancar y se pueden ejecutar de forma independiente.
Diagrama entidad-relación¶
El proyecto trabaja sobre una base de datos pequeña de tienda. Este diagrama resume las entidades y las relaciones que se usan en los ejemplos.
erDiagram
categorias ||--o{ productos : clasifica
clientes ||--o{ pedidos : realiza
pedidos ||--o{ lineas_pedido : contiene
productos ||--o{ lineas_pedido : aparece_en
categorias {
BIGINT id PK
VARCHAR nombre UK
}
productos {
BIGINT id PK
VARCHAR nombre
DECIMAL precio
INT stock
BIGINT categoria_id FK
}
clientes {
BIGINT id PK
VARCHAR nombre
VARCHAR email UK
}
pedidos {
BIGINT id PK
BIGINT cliente_id FK
DATE fecha
DECIMAL total
}
lineas_pedido {
BIGINT id PK
BIGINT pedido_id FK
BIGINT producto_id FK
INT unidades
DECIMAL subtotal
}
Lectura rápida del modelo:
- Una
categoriapuede tener muchosproductos. - Un
clientepuede realizar muchospedidos. - Un
pedidose descompone en variaslineas_pedido. - Cada
linea_pedidoreferencia un únicoproducto.
Cómo se ejecutan¶
- Entra en la carpeta del proyecto:
- Lista las tareas disponibles:
- Ejecuta la versión que te interese:
Mapa de microejemplos¶
ConexionValida¶
- Qué explica: conexión JDBC válida contra H2 y comprobación básica.
- Ejecuta:
runConexionValida_simpleyrunConexionValida_completo.
StatementSoloLectura¶
- Qué explica: uso de
Statementsolo cuando el SQL es fijo y no recibe datos externos. - Ejecuta:
runStatementSoloLectura_simpleyrunStatementSoloLectura_completo.
PreparedSelectParametro¶
- Qué explica: consulta parametrizada con
PreparedStatement. - Ejecuta:
runPreparedSelectParametro_simpleyrunPreparedSelectParametro_completo.
SelectBasico¶
- Qué explica:
SELECTmínimo con lectura de columnas y salida por consola. - Ejecuta:
runSelectBasico_simpleyrunSelectBasico_completo.
InsertBasico¶
- Qué explica: inserción simple y versión con servicio y validación.
- Ejecuta:
runInsertBasico_simpleyrunInsertBasico_completo.
UpdateBasico¶
- Qué explica: actualización controlada y comprobación de filas afectadas.
- Ejecuta:
runUpdateBasico_simpleyrunUpdateBasico_completo.
DeleteBasico¶
- Qué explica: borrado parametrizado y lectura posterior de comprobación.
- Ejecuta:
runDeleteBasico_simpleyrunDeleteBasico_completo.
MapeoFilaAObjeto¶
- Qué explica: transformación de una fila SQL a un objeto Kotlin.
- Ejecuta:
runMapeoFilaAObjeto_simpleyrunMapeoFilaAObjeto_completo.
MapeoUnoAMuchos¶
- Qué explica: reconstrucción de una relación uno a muchos desde filas SQL.
- Ejecuta:
runMapeoUnoAMuchos_simpleyrunMapeoUnoAMuchos_completo.
GestionSQLException¶
- Qué explica: tratamiento de
SQLExceptiony traducción a errores comprensibles. - Ejecuta:
runGestionSQLException_simpleyrunGestionSQLException_completo.
CierreRecursosUse¶
- Qué explica: cierre correcto de
Connection,PreparedStatementyResultSetconuse. - Ejecuta:
runCierreRecursosUse_simpleyrunCierreRecursosUse_completo.
TransaccionCommit¶
- Qué explica: transacción correcta con
commit. - Ejecuta:
runTransaccionCommit_simpleyrunTransaccionCommit_completo.
TransaccionRollback¶
- Qué explica: transacción fallida con
rollback. - Ejecuta:
runTransaccionRollback_simpleyrunTransaccionRollback_completo.
DaoBasico¶
- Qué explica: interfaz DAO e implementación JDBC mínima.
- Ejecuta:
runDaoBasico_simpleyrunDaoBasico_completo.
DaoConServicio¶
- Qué explica: DAO + servicio de aplicación con separación de responsabilidades.
- Ejecuta:
runDaoConServicio_simpleyrunDaoConServicio_completo.
PoolHikariBasico¶
- Qué explica: uso básico de un pool HikariCP.
- Ejecuta:
runPoolHikariBasico_simpleyrunPoolHikariBasico_completo.