Hello, JDBC

— стандартное API java для работы с базами данных. Обычно подразумеваются реляционные базы данных, но стандарт, в принципе, не ограничивает подвиды баз. Существуют драйверы для MongoDB, Redis, Cache итд. В статьях я буду использовать либо встраиваемую реляционную базу данных H2, либо MySQL или PostgreSQL.

JDBC состоит из двух частей — собственно интерфейса JDBC, который использует разработчик и драйверов JDBC, реализующих непосредственную работу с базой данных. Конкретный драйвер выбирается при открытии соединения с базой данных. Впрочем, меньше слов, больше кода.

Начнём с пустого проекта, в который добавим встраиваемую базу . Её JDBC драйвер входит в комлект поставки и отдельно его добавлять не требуется.

Дальше мы напишем код, который создаёт таблицу, добавляет в неё данные и потом извлекает их обратно:

В первую очередь открывается соединение с базой:

В метод getConnection() передаётся jdbc url, говорящий JDBC API с какой именно базой я хочу установить соединение. В общем виде формат url такой: «jdbc:driver:options», где driver — имя драйвер базы, options — параметры, специфичные для выбранного драйвера, указывающие ему на конкретную базу данных. В моём случае «jdbc:h2:mem» означает, что я хочу использовать драйвер базы данных H2, которому сообщается что мне нужна встроенная анонимная in-memory база. Соединение с базой обязательно надо закрывать за собой, поэтому я использую try-with-resources.

Для выполнения запросов надо получить из соединения с базой объект запроса:

Объект запроса тоже обязательно надо за собой закрывать, поэтому опять try-with-resources. JDBC поддерживает как обычные запросы, которые посылаются в базу и немедленно исполняются, так и отложенные запросы, которые посылаются в базу сразу, а исполняются позднее:

Запрос возвращает объект ResultSet, содержащий полученные данные. ResultSet содержит внутри себя строки, указатель на текущую строку и методы по получению данных из текущей строки. В моём примере я использую rs.next() для того, чтобы перемещаться по строкам и getString(), чтобы выбирать данные из столбцов. Обращаться к столбцам можно и по номеру столбца и по его имени.

Результат работы примера очевиден:

Код примера доступен на github.