Ну что же, я продолжаю свои уроки по Java и сегодня мы поговорим о том, как подключиться в Java к Базе Данных, получать данные, добавлять новые записи в базу данных, удалять записи.
И так, что нам понадобится для прохождения этого урока:
- Любая установленная локально База Данных, либо полный доступ к БД, установленной удаленно. Я буду использовать в своей статье Postgres, чего и Вам советую.
- Среда разработки JetBrains Intelij Idea. Возможно, я сделаю дополнительный урок, как проделать все, о чем мы будем говорить в этой статье вообще без какой какой-либо IDE, например, из консоли. Но пока пойдем по простому пути.
- Maven. Мы уже научились использовать Maven в предыдущих уроках, поэтому не вижу смысла искать по всему интернету «дрова» jdbc для той или иной базы данных и потом подключать их в проект.
- JDK. Желательно, 1.8.
Создание Maven-проекта
Итак, создаем пустой Maven-проект. На этот раз я сделаю это не из консоли, а прямо из IDE:
Идем в главное меню File -> New -> Project. Выбираем Maven:

Как видно, я не выбираю никаких предварительных артефактов. Жмем Next. Выбираем будущее имя проекта и его расположение на диске. Я назову проект у себя «jdbcHelloWorld«. Так же можно заполнить groupId и artifactId:

Создание базы данных и таблиц
Теперь немного отвлечемся от программирования и обратимся к делам, связанным с базами данных. Собственно мы и выбрали в качестве среды IntelijIdea, потому что прямо из IDE у нас есть возможность сконфигурировать БД. Итак, находим вкладку Database справа:

Жмем на нее и увидим, что вкладка пустая. Нужно добавить Базу Данных как источник данных в наш проект. Поехали!

Жмем «+» на верхней панели распахнутой вкладки Database, там выбираем Data Source и там в свою очередь — PostgreSQL. Откроется стандартный диалог конфигурирования источника данных. Если у Вас база данных стоит локально, то скорее всего URL до базы будет такой:
jdbc:postgresql://localhost:5432/postgres
Базу данных пока оставляем postgres, User и Password — вводим свои. Можно нажать «Test connection», чтобы проверить, что все работает и подключение прошло успешно. Если это так, жмем Ок:

Вызываем контекстное меню, щелкнув по свитку «датасорса» и ищем там пункт создания новой базы данных. Выглядеть это будет примерно так:

Я создаю у себя базу данных test_jdbc. Новая база данных появится теперь в свитке источника данных. Предлагаю остальное создать уже с sql, чтобы не «убивать» пост бесконечными скриншотами. Итак, вызываем контекстное меню, щелкнув по новой базе данных правой кнопкой. Там выбираем New -> Console. Откроется пустая консоль во вкладках, где обычно открываются вкладки открытых классов.
Создадим табличку сразу с автоинкрементным столбцом:
Табличка создана. Самое время подключиться к Базе Данных из Java. Начнем с добавления dependency для PostgreSQL. Открываем pom.xml и вставляем следующее:
Немного теории. Что такое JDBC и как это работает:

JDBC — это высокоуровневое API обеспечивающее упрощенный доступ из java-приложения к различным источникам данным. Вендоры различных БД выпускают jdbc-драйвера для своих баз данных, которые достаточно добавить в свой проект, а само API использует стандартизованный и унифицированный набор методов для работы с БД в независимости от того, с какой именно БД вы работаете. Это позволяет программисту не менять свой код под разные драйвера в случае миграции. Меняется только драйвер.
Подключение к базе данных
Теперь займемся подключением БД.
Создадим package для нашего проекта. Щелчок мышью для вызова контекстного меню по папке java в дереве проекта и выбираем New -> Package. Свой пакет я назвал com.antonromanov.jdbc. Создаем класс в этом пакете под именем PostgreSQLConnUtils. Я привиду полный код класса со всеми «импортами»:
Итак, подключение к БД у нас уже готово. Теперь попробуем вытащить данные из таблички.
Чтение данных из базы данных
Создадим как обычно главный класс нашего приложения, я назову его Main. Сразу добавим туда метод Main:
В методе Вы уже видите строчку вызова нашего сервисного метода getMySQLConnection. Метод статический, поэтому нам не надо создавать экземпляр класса для вызова его. Продолжим…
Теперь дополним наш класс Main следующим кодом:
Немного комментариев, что мы здесь делаем:
Сначала готовим коллецию типа List, которую мы будем заполнять значениями из БД:
List<User> result = new ArrayList<>();
Да, у Вас система сразу подсветит слово User, потому что это класс, который мы еще не создали. Сделаем его после разъяснения что к чему.
Далее пишем sql-запрос, которым будем тащить из БД все записи из таблицы user. Сохраняем его в переменную SQL_SELECT.
conn.prepareStatement(SQL_SELECT) — один из методов Connection, который позволяет приготовить запрос для выполнения в БД.
Методом preparedStatement.executeQuery() выполняем запрос. Метод возвращает объект типа RecordSet. Это что-то вроде указателя, который позволяет перемещаться по записям и вытаскивать по номеру или имени поля данные из той «строчки», где сейчас стоит указатель.
Ну а далее мы как раз в цикле перемещаем указатель по записям, считываем поля из таблицы, указывая какой именно тип данных нам нужен и присваиваем их соответствующим полям объекта User. Так как записей может быть много, то каждый User мы добавляем в List<>.
Теперь приведу код класса User:
Это, собственно, три поля и сеттеры / геттеры к ним. Теперь если запустить нашу программу, она не вернет ничего. Потому, что в таблице ничего нет. Поэтому нам надо добавить туда что-то, а потом снова отобразить. Предлагаю добавить три записи, отобразить их, а потом удалить. Вот такая интересная задачка.
JDBC. Insert и Delete
Сразу приведу код нашего приложения:
Что поменялось? Я разнес логику select, insert и delete по отдельным методам. Добавил дополнительный конструктор в User, теперь класс выглядит так:
Вот собственно и все! Вуаля!