9.a.1 - Métodos de Acceso a Gestores de Bases de Datos

Objetivo

Identificar las características y métodos de acceso a sistemas gestores de bases de datos.

Contenidos

1. Idea general

Un método de acceso a un SGBD es la forma en la que una aplicación se comunica con una base de datos o con un sistema que gestiona datos.

No todas las aplicaciones acceden igual a los datos. Algunas se conectan directamente al SGBD mediante un driver, otras usan una capa de objetos, y otras no acceden directamente a la base de datos, sino que lo hacen a través de una API.

Podemos ordenar estos métodos de menor a mayor nivel de abstracción:

ODBC / JDBC → JPA / Hibernate → API REST

Cuanto más cerca estamos de JDBC u ODBC, más directamente trabajamos con SQL y con el SGBD. Cuanto más cerca estamos de una API REST, más lejos está el cliente de la base de datos real.

2. JDBC

JDBC, Java Database Connectivity, es la API estándar de Java para acceder a bases de datos relacionales.

Permite que un programa Java pueda abrir una conexión con una base de datos, enviar sentencias SQL, recibir resultados, ejecutar operaciones de inserción, consulta, actualización y borrado, gestionar errores y cerrar los recursos utilizados.

Características técnicas

  • Utiliza un driver JDBC específico para cada SGBD.
  • La aplicación abre una conexión con la base de datos.
  • Las operaciones se realizan normalmente mediante sentencias SQL.
  • Los resultados de las consultas se recorren desde Java.
  • El programador debe gestionar conexiones, errores y cierre de recursos.

Ventajas

  • Es estándar en Java.
  • Permite controlar directamente el SQL.
  • Es adecuado para aprender cómo se comunica Java con una base de datos.
  • Funciona con muchos SGBD distintos usando el driver adecuado.
  • Tiene buen rendimiento si se usa correctamente.

Inconvenientes

  • Obliga a escribir bastante código repetitivo.
  • El programador debe transformar manualmente filas de la base de datos en objetos Java.
  • Hay que cerrar correctamente los recursos.
  • Puede generar errores de seguridad si se construyen consultas concatenando datos del usuario.

Aplicaciones recomendables

JDBC es recomendable en aplicaciones Java sencillas o medianas, aplicaciones de escritorio, proyectos educativos, herramientas internas, programas con pocas tablas o sistemas donde se quiere controlar directamente el SQL.

3. ODBC

ODBC, Open Database Connectivity, es una interfaz estándar para acceder a bases de datos desde diferentes lenguajes, aplicaciones y sistemas.

A diferencia de JDBC, que está pensado para Java, ODBC es una solución más general. Se usa mucho en entornos empresariales, herramientas de escritorio, hojas de cálculo y aplicaciones que necesitan conectarse a distintas fuentes de datos.

Características técnicas

  • Utiliza un driver ODBC específico para cada SGBD.
  • Puede requerir una configuración externa en el sistema operativo.
  • Trabaja normalmente con SQL.
  • Permite que aplicaciones distintas accedan a la misma base de datos usando una interfaz común.
  • Puede usar un DSN, que es una configuración del origen de datos.

Ventajas

  • No está limitado a un único lenguaje de programación.
  • Es útil para integrar aplicaciones heterogéneas.
  • Se usa en herramientas como hojas de cálculo, aplicaciones de análisis o sistemas de informes.
  • Permite reutilizar una configuración común para distintas aplicaciones.

Inconvenientes

  • Puede depender mucho del sistema operativo y de la configuración local.
  • No encaja tan bien con la programación orientada a objetos.
  • Para una aplicación Java suele ser menos natural que JDBC.
  • Puede complicar la distribución de aplicaciones sencillas.

Aplicaciones recomendables

ODBC es recomendable en entornos empresariales con aplicaciones variadas, integración con herramientas de oficina, análisis de datos, sistemas antiguos o aplicaciones que deben acceder a diferentes SGBD desde tecnologías distintas.

4. JPA

JPA, Java Persistence API, actualmente integrada en Jakarta Persistence, es una especificación estándar para gestionar persistencia en aplicaciones Java mediante mapeo objeto-relacional.

JPA no es una base de datos ni un driver. Es una especificación que define cómo trabajar con objetos Java persistentes. Para usarla se necesita una implementación concreta, como Hibernate, EclipseLink u OpenJPA.

Características técnicas

  • Permite relacionar clases Java con tablas de una base de datos.
  • Permite relacionar objetos Java con filas de una tabla.
  • Trabaja con entidades, identificadores, relaciones y contexto de persistencia.
  • Reduce la necesidad de escribir SQL en operaciones comunes.
  • Normalmente utiliza JDBC internamente para comunicarse con el SGBD.

Ventajas

  • Encaja muy bien con la programación orientada a objetos.
  • Reduce código repetitivo de acceso a datos.
  • Facilita la separación entre lógica de negocio y persistencia.
  • Es un estándar del ecosistema Java empresarial.
  • Permite trabajar con entidades en lugar de trabajar siempre con tablas y filas.

Inconvenientes

  • Tiene más complejidad inicial que JDBC.
  • Puede ocultar demasiado lo que ocurre realmente en la base de datos.
  • Puede generar consultas poco eficientes si se usa sin comprender su funcionamiento.
  • Para aplicaciones pequeñas puede resultar excesivo.

Aplicaciones recomendables

JPA es recomendable en aplicaciones Java medianas o grandes, aplicaciones empresariales, aplicaciones web, proyectos con muchas entidades relacionadas y sistemas donde se quiere trabajar principalmente con objetos de dominio.

5. Hibernate

Hibernate es un framework ORM para Java. ORM significa mapeo objeto-relacional.

Hibernate permite convertir clases Java en entidades persistentes y gestionar automáticamente muchas operaciones contra la base de datos. Puede utilizarse como implementación de JPA y también ofrece características propias más allá del estándar.

Diferencia importante: JPA es una especificación; Hibernate es una implementación concreta y un framework ORM.

Características técnicas

  • Mapea clases Java a tablas de una base de datos.
  • Genera muchas sentencias SQL automáticamente.
  • Gestiona relaciones entre entidades.
  • Permite carga diferida de datos, conocida como lazy loading.
  • Puede utilizar caché para mejorar el rendimiento.
  • Se integra habitualmente con Spring Boot y Jakarta EE.

Ventajas

  • Reduce mucho el código necesario para acceder a la base de datos.
  • Permite trabajar de forma natural con objetos Java.
  • Es muy utilizado en aplicaciones profesionales.
  • Facilita la gestión de modelos de datos complejos.
  • Aporta funcionalidades avanzadas de persistencia.

Inconvenientes

  • Tiene una curva de aprendizaje considerable.
  • Puede provocar problemas de rendimiento si no se entiende el SQL que genera.
  • Los errores pueden ser más difíciles de interpretar para principiantes.
  • Puede ser demasiado complejo para aplicaciones pequeñas.

Aplicaciones recomendables

Hibernate es recomendable en aplicaciones Java profesionales, aplicaciones web con muchas entidades, sistemas empresariales, proyectos Spring Boot y aplicaciones donde la persistencia tenga cierta complejidad.

6. APIs REST

Una API REST no es un método de acceso directo a un SGBD. Es una forma de comunicación entre aplicaciones usando HTTP.

En una arquitectura con API REST, el cliente no se conecta directamente a la base de datos. El cliente envía peticiones a un servidor, y es el servidor quien accede a la base de datos mediante JDBC, JPA, Hibernate u otro método.

Cliente → API REST → Backend → SGBD

Características técnicas

  • Utiliza HTTP como protocolo de comunicación.
  • Organiza la información en recursos.
  • Usa operaciones habituales como obtener, crear, modificar o eliminar datos.
  • El formato de intercambio más habitual es JSON.
  • Oculta al cliente la estructura interna de la base de datos.

Ventajas

  • Separa claramente cliente y servidor.
  • Permite que varios clientes usen el mismo backend.
  • Es muy adecuada para aplicaciones web y móviles.
  • La base de datos no queda expuesta directamente.
  • Permite cambiar la base de datos sin modificar necesariamente el cliente.

Inconvenientes

  • Requiere desarrollar y mantener un backend.
  • Añade una capa más a la arquitectura.
  • Depende de la red, salvo en arquitecturas locales especiales.
  • Requiere gestionar autenticación, permisos, errores y formatos de respuesta.

Aplicaciones recomendables

Las APIs REST son recomendables en aplicaciones web, aplicaciones móviles, sistemas cliente-servidor, microservicios, integraciones entre sistemas y aplicaciones donde la base de datos no debe estar accesible directamente desde el cliente.

7. Comparación general

Método Nivel de abstracción Acceso directo al SGBD Uso de SQL Uso típico
JDBC Bajo / medio Sí Directo Aplicaciones Java con BBDD relacional
ODBC Bajo Sí Directo Integración entre herramientas y SGBD
JPA Alto Indirecto Reducido o parcial Aplicaciones Java empresariales
Hibernate Alto Indirecto Reducido o generado automáticamente Aplicaciones Java profesionales con ORM
API REST Muy alto No desde el cliente No desde el cliente Aplicaciones web, móviles y sistemas distribuidos

8. Diferencias principales

JDBC frente a ODBC

JDBC está pensado para aplicaciones Java. ODBC es más general y puede ser utilizado por diferentes lenguajes y herramientas. En una aplicación Java suele ser más natural usar JDBC.

JDBC frente a JPA

JDBC trabaja directamente con SQL, tablas y filas. JPA trabaja con entidades, objetos y relaciones. JDBC da más control directo; JPA reduce código repetitivo y se adapta mejor a aplicaciones orientadas a objetos.

JPA frente a Hibernate

JPA es una especificación, es decir, un estándar. Hibernate es una implementación concreta de ese estándar y además proporciona funcionalidades propias.

Hibernate frente a JDBC

Hibernate trabaja a un nivel más alto. El programador usa objetos y entidades, mientras Hibernate genera muchas operaciones SQL internamente. Aun así, normalmente Hibernate termina comunicándose con la base de datos mediante JDBC.

API REST frente a JDBC, JPA e Hibernate

Una API REST no suele sustituir a JDBC, JPA o Hibernate en el backend. Más bien se coloca por delante de ellos para que el cliente no acceda directamente al SGBD.

9. Qué método elegir según la aplicación

Tipo de aplicación Método recomendable
Aplicación Java sencilla de escritorio JDBC
Aplicación educativa para aprender bases de datos JDBC
Aplicación Java con pocas tablas JDBC o JPA sencillo
Aplicación empresarial Java JPA con Hibernate
Aplicación Spring Boot JPA/Hibernate o JDBC según complejidad
Aplicación móvil con servidor API REST
Aplicación web moderna API REST + backend con JPA/Hibernate o JDBC
Herramienta de análisis conectada a varias BBDD ODBC

10. Otros métodos relevantes

Además de los métodos anteriores, conviene conocer otros métodos de acceso a datos:

  • Drivers nativos del SGBD: librerías propias de una base de datos concreta para conectarse desde un lenguaje determinado.
  • ADO.NET: tecnología habitual en el ecosistema .NET para acceder a bases de datos desde lenguajes como C#.
  • ORM de otros lenguajes: por ejemplo, SQLAlchemy en Python, Entity Framework en C#, Doctrine en PHP o Prisma en JavaScript/TypeScript.
  • GraphQL: alternativa a REST donde el cliente puede indicar con más precisión qué datos necesita.
  • SDK de servicios cloud: forma de acceder a bases de datos o servicios gestionados como Firebase, Firestore, Supabase o DynamoDB.

11. Resumen final

  • JDBC permite acceder directamente desde Java a una base de datos relacional.
  • ODBC permite acceso general a bases de datos desde distintas herramientas y lenguajes.
  • JPA permite trabajar con persistencia orientada a objetos mediante una especificación estándar.
  • Hibernate es un framework ORM muy usado que implementa JPA y añade funciones propias.
  • API REST permite que un cliente acceda a datos a través de un servidor, sin conectarse directamente al SGBD.

En Java, un recorrido lógico de aprendizaje sería: SQL → JDBC → DAO → JPA → Hibernate → API REST.

Bibliografía