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

JDBC es específico para bases de datos relacionales. Para MongoDB, Redis o Cassandra existen drivers propios. Sin embargo, hay algunos adaptadores JDBC para NoSQL que permiten lanzar SQL limitado contra ellos (simulando el driver JDBC).

Conectar con PostgreSQL

// pom.xml
// <dependency>
//   <groupId>org.postgresql</groupId>
//   <artifactId>postgresql</artifactId>
//   <version>42.7.3</version>
// </dependency>

HikariConfig cfg = new HikariConfig();
cfg.setJdbcUrl("jdbc:postgresql://localhost:5432/mi_base?ssl=false");
cfg.setUsername("postgres");
cfg.setPassword("contraseña");

// PostgreSQL arrays
try (PreparedStatement ps = con.prepareStatement("SELECT ARRAY[1,2,3]")) {
    ResultSet rs = ps.executeQuery();
    rs.next();
    Array arr = rs.getArray(1);
    int[] valores = (int[]) arr.getArray();
}

// PostgreSQL JSONB
try (PreparedStatement ps = con.prepareStatement("SELECT datos::text FROM config WHERE id=?")) {
    ps.setInt(1, 1);
    ResultSet rs = ps.executeQuery();
    rs.next();
    String json = rs.getString(1); // parsear con Jackson
}

H2: base de datos embebida para tests

// pom.xml (scope test)
// <dependency>groupId>com.h2database<...><artifactId>h2<...><version>2.3.232</version><scope>test</scope>
// </dependency>

HikariConfig cfg = new HikariConfig();
cfg.setJdbcUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MySQL");
cfg.setUsername("sa");
cfg.setPassword("");

// Inicializar esquema desde SQL
try (Connection con = ds.getConnection();
     Statement  st  = con.createStatement()) {
    st.execute("CREATE TABLE productos (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100), precio DOUBLE)");
    st.execute("INSERT INTO productos VALUES (DEFAULT, 'Teclado', 49.99)");
}

Migración de esquemas con Flyway

En producción, los cambios de esquema deben gestionarse con una herramienta de migración. Flyway es la más popular para proyectos Java:

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>10.15.2</version>
</dependency>
// Migraciones en src/main/resources/db/migration/
// V1__crear_tabla_productos.sql
// V2__agregar_columna_stock.sql

Flyway flyway = Flyway.configure()
    .dataSource(ds)
    .locations("classpath:db/migration")
    .load();

flyway.migrate(); // aplica las migraciones pendientes al arrancar

COMPARTE ESTE ARTÍCULO

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