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
