JDBC API

Тема дорожной карты · Java

Основы JDBC (Java Database Connectivity) охватывают стандартный Java API в java.sql и javax.sql, позволяющий Java-приложениям подключаться к любой реляционной базе данных — PostgreSQL, MySQL, Oracle, H2, SQLite — через агностичный к драйверу интерфейс, делая код приложения переносимым между поставщиками баз данных. Рабочий процесс основ JDBC начинается с загрузки драйвера (автоматически с Java 6 через ServiceLoader) и получения Connection через DriverManager.getConnection(url, user, password) или, в производстве, из DataSource, предоставляемого пулом соединений вроде HikariCP. Statement выполняет произвольный SQL, тогда как PreparedStatement предварительно компилирует параметризованный запрос (SELECT * FROM orders WHERE id = ?) и устанавливает параметры через setLong(1, orderId) — использование PreparedStatement является лучшей практикой основ JDBC, поскольку предотвращает SQL-инъекции и улучшает производительность за счёт кеширования операторов. Результаты запросов возвращаются как ResultSet — итератор на основе курсора, где rs.next() переходит к следующей строке, а типизированные геттеры rs.getString("name"), rs.getLong("id") и rs.getTimestamp("created_at") извлекают значения столбцов. Все JDBC-ресурсы — Connection, Statement, PreparedStatement и ResultSet — реализуют AutoCloseable и должны закрываться в блоках try-with-resources для возврата соединений в пул и предотвращения утечек ресурсов — наиболее распространённая ошибка основ JDBC в Java бэкенд-приложениях.

Как это работает

JDBC API (Java Database Connectivity) — стандартный SQL-API: DriverManager.getConnection, PreparedStatement, ResultSet. Connection pooling (HikariCP — де факто) обязателен в production. Higher-level абстракции: JPA / Hibernate (ORM), Spring Data JPA, jOOQ (type-safe SQL DSL), MyBatis (mapper-based). Для Spring Boot — Spring Data JPA + Flyway/Liquibase для миграций (конвенциональный стек).

Когда применять

Всегда PreparedStatement с параметрами (?) — никогда не конкатенируйте SQL с user-input. HikariCP для pool (разумнее defaults, чем DBCP). JPA/Hibernate — для CRUD-heavy приложений, где ORM экономит время; jOOQ — когда SQL должен быть first-class. Миграции схемы всегда через тул (Flyway, Liquibase); никогда руками в prod.

Типичные ошибки

Ловушки JDBC API: SQL-инъекция из конкатенации ("я же доверяю input" — пока не доверяете); утечки соединений (всегда try-with-resources или контейнер-managed); N+1 запросов от наивного Hibernate (eager-load явно через JOIN FETCH); медленный старт из-за Hibernate-metamodel + прогрев pool (прогревайте в CI/тестах).

Связанные понятия

Полезные ресурсы