Готовы ли вы работать с SQL и базами данных в Java?

«Готовы ли вы работать с SQL и базами данных в Java?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, готов. В Java работа с реляционными базами данных обычно ведется через JDBC (Java Database Connectivity) или ORM-фреймворки.

1. Работа на уровне JDBC: Позволяет выполнять нативные SQL-запросы и управлять подключениями.

try (Connection conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/db", "user", "pass");
     PreparedStatement stmt = conn.prepareStatement(
        "SELECT * FROM users WHERE id = ?")) {

    stmt.setInt(1, userId); // Безопасная подстановка параметров
    ResultSet rs = stmt.executeQuery();

    while (rs.next()) {
        System.out.println(rs.getString("username"));
    }
} catch (SQLException e) {
    e.printStackTrace(); // На практике используйте логгирование
}

Почему PreparedStatement? Он предотвращает SQL-инъекции и повышает производительность за счет кэширования плана запроса.

2. Использование ORM (например, Hibernate/JPA): Позволяет работать с данными как с объектами, минимизируя ручной SQL.

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    private Long id;
    private String username;
    // Геттеры и сеттеры
}
// ...
List<User> users = entityManager.createQuery(
    "FROM User WHERE username LIKE :name", User.class)
    .setParameter("name", "A%")
    .getResultList();

Преимущества ORM: повышение производительности разработки, кэширование, независимость от конкретной СУБД (в пределах возможного).