Acceso a bases de datos con JDBC: tutorial completo Java 21

La forma más sencilla de obtener una conexión JDBC es con DriverManager, pero en producción siempre debes usar un pool de conexiones. Crear y destruir conexiones para cada petición es lento y costoso; un pool las reutiliza.

Conexión directa con DriverManager (solo para scripts y tests)

import java.sql.*;

String url  = "jdbc:mysql://localhost:3306/mi_base?useSSL=false&serverTimezone=UTC";
String user = "usuario";
String pass = "contraseña";

try (Connection con = DriverManager.getConnection(url, user, pass)) {
    System.out.println("Conectado: " + con.getMetaData().getDatabaseProductVersion());
} catch (SQLException e) {
    System.err.println("Error: " + e.getMessage());
}

HikariCP: el pool más rápido para Java

HikariCP es el pool de conexiones recomendado en 2026. Es el pool por defecto de Spring Boot y el más rápido según todos los benchmarks disponibles.

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;

public class DatabaseConfig {

    private static final HikariDataSource dataSource;

    static {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mi_base?useSSL=true&serverTimezone=UTC&characterEncoding=UTF-8");
        config.setUsername("usuario");
        config.setPassword("contraseña");

        // Pool settings
        config.setMaximumPoolSize(20);        // máximo de conexiones
        config.setMinimumIdle(5);             // conexiones mínimas en espera
        config.setConnectionTimeout(30_000);  // timeout al obtener conexión (30s)
        config.setIdleTimeout(600_000);       // tiempo máximo inactiva (10min)
        config.setMaxLifetime(1_800_000);     // vida máxima de una conexión (30min)
        config.setPoolName("MiPool");

        // Validar conexiones
        config.setConnectionTestQuery("SELECT 1");

        dataSource = new HikariDataSource(config);
    }

    public static DataSource getDataSource() { return dataSource; }

    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    public static void close() { dataSource.close(); }
}

Uso del pool

// try-with-resources devuelve la conexión al pool al terminar
try (Connection con = DatabaseConfig.getConnection()) {
    // usar la conexión
    System.out.println("Pool size: " + DatabaseConfig.getDataSource()
        .unwrap(HikariDataSource.class).getHikariPoolMXBean().getTotalConnections());
}

Cargar configuración desde fichero (buena práctica)

// hikari.properties
dataSource.url=jdbc:mysql://localhost:3306/mi_base
dataSource.user=usuario
dataSource.password=contraseña
maximumPoolSize=20

// En Java
HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource ds = new HikariDataSource(config);

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR