Introducción: ¿por qué un desarrollador Java debe conocer PostgreSQL y MongoDB?
El desarrollo moderno en Java rara vez prescinde de la interacción con bases de datos. Los dos sistemas más populares —la relacional PostgreSQL y la orientada a documentos MongoDB— cubren el 90% de las tareas de las aplicaciones empresariales. PostgreSQL es ideal para esquemas estrictos y sistemas transaccionales, mientras que MongoDB lo es para estructuras de datos flexibles y altas cargas de escritura.
En este artículo analizaremos ejemplos prácticos de conexión de ambas BD desde Java, realizaremos operaciones CRUD básicas y compararemos enfoques. El material será útil tanto para principiantes como para desarrolladores experimentados que deseen refrescar sus conocimientos.
1. PostgreSQL en Java: el clásico de las bases relacionales
1.1. Conexión y configuración
Para trabajar con PostgreSQL en Java se utiliza el controlador org.postgresql:postgresql. Agregue la dependencia en pom.xml (Maven):
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.1</version></dependency>La conexión a través de JDBC se ve así:
String url = "jdbc:postgresql://localhost:5432/mydb";String user = "postgres";String password = "secret";
try (Connection conn = DriverManager.getConnection(url, user, password)) { System.out.println("¡Conexión con PostgreSQL establecida!");} catch (SQLException e) { e.printStackTrace();}1.2. Operaciones CRUD en la práctica
Creemos la tabla users y realicemos operaciones básicas:
// Creación de tablaString createSQL = """ CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE, age INTEGER )""";
try (Statement stmt = conn.createStatement()) { stmt.execute(createSQL); System.out.println("Tabla creada");}
// INSERTString insertSQL = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) { pstmt.setString(1, "Iván Petrov"); pstmt.setString(2, "ivan@example.com"); pstmt.setInt(3, 30); pstmt.executeUpdate();}
// SELECTString selectSQL = "SELECT * FROM users WHERE age > ?";try (PreparedStatement pstmt = conn.prepareStatement(selectSQL)) { pstmt.setInt(1, 25); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.printf("ID: %d, Nombre: %s, Email: %s%n", rs.getInt("id"), rs.getString("name"), rs.getString("email")); }}Importante: Utilice siempre PreparedStatement para protegerse contra inyecciones SQL.
2. MongoDB en Java: flexibilidad del modelo documental
2.1. Conexión a través de MongoDB Sync Driver
Agregue en pom.xml:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.11.1</version></dependency>Conexión a MongoDB local:
import com.mongodb.client.MongoClients;import com.mongodb.client.MongoClient;import com.mongodb.client.MongoDatabase;
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");MongoDatabase database = mongoClient.getDatabase("mydb");System.out.println("Conexión con MongoDB establecida");2.2. Operaciones CRUD con documentos
Trabajamos con la colección users:
import com.mongodb.client.MongoCollection;import org.bson.Document;import static com.mongodb.client.model.Filters.*;
MongoCollection<Document> collection = database.getCollection("users");
// CREATE — inserción de documentoDocument user = new Document("name", "Ana Smith");