Работа с базами данных в Java: PostgreSQL и MongoDB для начинающих
В современной разработке на Java умение работать с базами данных (БД) является одним из ключевых навыков. Независимо от того, создаёте ли вы веб-приложение, мобильный сервис или корпоративную систему, вам потребуется хранить, извлекать и обрабатывать данные. В этой статье мы рассмотрим две популярные системы управления базами данных (СУБД): реляционную PostgreSQL и документо-ориентированную MongoDB. Вы узнаете, как подключиться к ним из Java-приложения, выполнять базовые операции и поймёте, в каких случаях выбирать ту или иную технологию. Материал ориентирован на начинающих разработчиков, поэтому все примеры кода максимально просты и снабжены комментариями.
1. Основы работы с PostgreSQL в Java
PostgreSQL — это мощная объектно-реляционная СУБД с открытым исходным кодом. Для взаимодействия с ней из Java используется драйвер JDBC (Java Database Connectivity). Рассмотрим пошаговый процесс подключения и выполнения запросов.
1.1. Подключение драйвера и настройка
Первым делом необходимо добавить зависимость в ваш проект. Если вы используете Maven, добавьте в pom.xml следующий блок:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.1</version>
</dependency>
Для Gradle добавьте строку в build.gradle:
implementation 'org.postgresql:postgresql:42.7.1'
1.2. Создание таблицы и вставка данных
Предположим, у нас есть база данных testdb с пользователем user и паролем pass. Создадим простую таблицу users и добавим несколько записей.
import java.sql.*;
public class PostgresExample {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/testdb";
String user = "user";
String password = "pass";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
// Создание таблицы
String createTableSQL = "CREATE TABLE IF NOT EXISTS users (" +
"id SERIAL PRIMARY KEY, " +
"name VARCHAR(100) NOT NULL, " +
"email VARCHAR(100) UNIQUE)";
stmt.executeUpdate(createTableSQL);
System.out.println("Таблица создана или уже существует.");
// Вставка данных
String insertSQL = "INSERT INTO users (name, email) VALUES " +
"('Иван Петров', 'ivan@example.com'), " +
"('Мария Смирнова', 'maria@example.com')";
int rowsInserted = stmt.executeUpdate(insertSQL);
System.out.println("Добавлено строк: " + rowsInserted);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1.3. Чтение данных с помощью PreparedStatement
Для безопасной работы с пользовательским вводом используйте PreparedStatement. Это предотвращает SQL-инъекции.
String selectSQL = "SELECT * FROM users WHERE name LIKE ?";
try (PreparedStatement pstmt = conn.prepareStatement(selectSQL)) {
pstmt.setString(1, "%Иван%");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.println("ID: " + id + ", Имя: " + name + ", Email: " + email);
}
} catch (SQLException e) {
e.printStackTrace();
}
Как видите, работа с PostgreSQL в Java стандартна и хорошо документирована. Главное — не забывать закрывать ресурсы (лучше всего использовать try-with-resources).
2. Начало работы с MongoDB в Java
MongoDB — это NoSQL база данных, хранящая данные в виде JSON-подобных документов (BSON). Для Java существует официальный драйвер MongoDB Java Driver.
2.1. Подключение драйвера MongoDB
Добавьте в Maven:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.11.1</version>
</dependency>
2.2. Подключение к серверу и работа с коллекциями
В MongoDB аналогом таблицы является коллекция, а записью — документ. Рассмотрим пример подключения и вставки данных.
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
public class MongoExample {
public static void main(String[] args) {
// Подключение к локальному серверу MongoDB (порт по умолчанию 27017)
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
// Получаем базу данных (если её нет, она создастся автоматически)
MongoDatabase database = mongoClient.getDatabase("testdb");
// Получаем коллекцию (аналог таблицы)
MongoCollection<Document> collection = database.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"));
// Вставка нескольких документов
Document user2 = new Document("name", "Дмитрий Иванов")
.append("email", "dmitry@example.com")
.append("age", 35);
collection.insertOne(user2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.3. Поиск и фильтрация документов
Для чтения данных используйте объекты Filters из библиотеки com.mongodb.client.model.
import com.mongodb.client.model.Filters;
// Найти всех пользователей старше 30 лет
FindIterable<Document> docs = collection.find(Filters.gt("age", 30));
for (Document doc : docs) {
System.out.println(doc.toJson());
}
// Найти одного пользователя по email
Document found = collection.find(Filters.eq("email", "anna@example.com")).first();
if (found != null) {
System.out.println("Найден: " + found.getString("name"));
}
Обратите внимание: в MongoDB нет схемы данных, что да