Работа с базами данных в Java: PostgreSQL и MongoDB для начинающих
Современная Java-разработка редко обходится без взаимодействия с базами данных. Независимо от того, создаёте ли вы веб-приложение, мобильный сервис или корпоративную систему, умение работать с SQL и NoSQL базами данных — обязательный навык. В этой статье мы разберём, как подключаться к PostgreSQL (реляционная БД) и MongoDB (документоориентированная БД) из Java, выполнять базовые операции и избегать типичных ошибок.
Материал рассчитан на начинающих разработчиков, которые уже знакомы с основами Java (классы, методы, исключения) и хотят научиться работать с данными. Все примеры кода можно скопировать и запустить в своей среде разработки.
1. Подготовка окружения и зависимости
Для работы с базами данных в Java вам потребуется добавить соответствующие библиотеки. Мы будем использовать Maven для управления зависимостями. Если вы используете Gradle или другой сборщик, принцип будет аналогичным.
Зависимости для PostgreSQL (через JDBC)
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.1</version>
</dependency>
Зависимости для MongoDB (официальный драйвер)
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.11.1</version>
</dependency>
После добавления зависимостей обновите проект (Maven → Reload Project). Убедитесь, что у вас установлены и запущены сами базы данных (локально или через Docker).
2. Работа с PostgreSQL в Java
PostgreSQL — классическая реляционная база данных. Для взаимодействия с ней из Java используется JDBC (Java Database Connectivity). Рассмотрим полный цикл: подключение, создание таблицы, вставка и чтение данных.
2.1. Подключение к базе данных
Создадим класс PostgresConnector с методом для получения соединения:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class PostgresConnector {
private static final String URL = "jdbc:postgresql://localhost:5432/testdb";
private static final String USER = "postgres";
private static final String PASSWORD = "your_password";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
2.2. Создание таблицы и вставка данных
Используем Statement и PreparedStatement для выполнения SQL-запросов:
import java.sql.*;
public class PostgresExample {
public static void main(String[] args) {
String createTableSQL = "CREATE TABLE IF NOT EXISTS users (" +
"id SERIAL PRIMARY KEY, " +
"name VARCHAR(100) NOT NULL, " +
"email VARCHAR(100) UNIQUE NOT NULL)";
String insertSQL = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = PostgresConnector.getConnection();
Statement stmt = conn.createStatement()) {
// Создаём таблицу
stmt.execute(createTableSQL);
System.out.println("Таблица users создана (или уже существует).");
// Вставляем данные через PreparedStatement (безопасно от SQL-инъекций)
try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
pstmt.setString(1, "Иван Петров");
pstmt.setString(2, "ivan@example.com");
pstmt.executeUpdate();
System.out.println("Пользователь добавлен.");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.3. Чтение данных
Для выборки используем ResultSet:
String selectSQL = "SELECT * FROM users";
try (Connection conn = PostgresConnector.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(selectSQL)) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.printf("ID: %d, Name: %s, Email: %s%n", id, name, email);
}
} catch (SQLException e) {
e.printStackTrace();
}
Важно: Всегда закрывайте ресурсы (Connection, Statement, ResultSet) в блоке try-with-resources — это предотвращает утечки памяти и соединений.
3. Работа с MongoDB в Java
MongoDB — NoSQL база данных, хранящая данные в виде JSON-подобных документов. Для Java используем официальный синхронный драйвер.
3.1. Подключение и выбор базы данных
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
public class MongoConnector {
private static final String CONNECTION_STRING = "mongodb://localhost:27017";
private static final String DATABASE_NAME = "testdb";
public static MongoDatabase getDatabase() {
MongoClient client = MongoClients.create(CONNECTION_STRING);
return client.getDatabase(DATABASE_NAME);
}
}
3.2. Вставка документа (Create)
Документы в MongoDB представляются классом Document:
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
public class MongoExample {
public static void main(String[] args) {
MongoDatabase db = MongoConnector.getDatabase();
MongoCollection<Document> collection = db.getCollection("users");
// Создаём документ
Document user = new Document("name", "Анна Смирнова")
.append("email", "anna@example.com")
.append("age", 28);
// Вставляем один документ
collection.insertOne(user);
System.out.println("Документ вставлен. ID: " + user.getObjectId("_id"));
}
}
3.3. Чтение документов (Read)
Используем FindIterable для выборки:
import com.mongodb.client.FindIterable;
// Поиск всех документов
FindIterable<Document> documents = collection.find();
for (Document doc : documents) {
System.out.println(doc.toJson());
}
// Поиск с фильтром (возраст больше 25)
Document filter = new Document("age", new Document("$gt", 25));
FindIterable<Document> filtered = collection.find(filter);
for (Document doc : filtered) {
System.out.println("Найден: " + doc.getString("name"));
}
Блоги
Рекомендаций по книгам
Читайте также
Go для машинного обучения: возможности, примеры и ограничения