Какой у вас опыт работы с JDBC (Java Database Connectivity)?

«Какой у вас опыт работы с JDBC (Java Database Connectivity)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Имею практический опыт работы с JDBC (Java Database Connectivity) — низкоуровневым Java API для взаимодействия с реляционными базами данных. Он предоставляет стандартный интерфейс для выполнения SQL-запросов, обработки результатов и управления транзакциями.

Основные операции, которые выполнял:

  1. Установка соединения: Использование DriverManager или DataSource (предпочтительнее) для получения Connection.
  2. Выполнение запросов: Работа с Statement, PreparedStatement (для параметризованных запросов, защищает от SQL-инъекций) и CallableStatement (для хранимых процедур).
  3. Обработка результатов: Итерация по ResultSet для извлечения данных.
  4. Управление транзакциями: Явный контроль с помощью commit() и rollback(), настройка уровней изоляции.
  5. Работа с метаданными: Использование DatabaseMetaData и ResultSetMetaData.

Пример подключения к PostgreSQL и выполнения запроса:

// Использование try-with-resources для автоматического закрытия ресурсов
String url = "jdbc:postgresql://localhost:5432/mydb";
String sql = "SELECT id, name FROM users WHERE active = ?";

try (Connection conn = DriverManager.getConnection(url, "user", "pass");
     PreparedStatement stmt = conn.prepareStatement(sql)) {

    stmt.setBoolean(1, true); // Установка параметра

    try (ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            System.out.printf("ID: %d, Name: %s%n", id, name);
        }
    }
} catch (SQLException e) {
    // Обработка ошибок (логирование, проброс исключения)
    e.printStackTrace();
}

Для production-приложений: использовал пулы соединений (HikariCP — самый быстрый) для эффективного управления подключениями и фреймворки более высокого уровня, такие как Spring Data JPA или MyBatis, которые абстрагируют рутинную работу с JDBC.