Работа с базами данных в Java: PostgreSQL и MongoDB для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с базами данных в 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"));
}

Блоги

Рекомендаций по книгам