JDBC. Подключение БД и создание консольного Java приложения в IntelliJ IDEA
Введение
Эта статья открывает небольшой цикл, посвященный азам взаимодействия с
базами данных (БД) в Java и
введению в SQL. Многие программы заняты обработкой и модификацией информации, её поддержкой в актуальном состоянии. Поскольку данные — весьма важная часть логики программ, то под них зачастую выделяют отдельное хранилище. Информация в нём структурирована и подчинена специальным правилам, чтобы обеспечить правильность обработки и хранения. Доступ к данным и их изменение осуществляется с помощью специального языка запросов — SQL (Structured Query Language).
Система управления базами данных — это ПО, которое обеспечивает взаимодействие разных внешних программ с данными и дополнительные службы (журналирование, восстановление, резервное копирование и тому подобное), в том числе посредством SQL. То есть программная прослойка между данными и внешними программами с ними работающими. В этой части ответим на вопросы что такое SQL, что такое SQL сервер и создадим первую программу для взаимодействия с СУБД.
Виды СУБД
Существует несколько видов СУБД по способу организации хранения данных:
- Иерархические. Данные организованы в виде древовидной структуры. Пример — файловая система, которая начинается с корня диска и далее прирастает ветвями файлов разных типов и папок разной степени вложенности.
- Сетевые. Видоизменение иерархической, у каждого узла может быть больше одного родителя.
- Объектно-ориентированные. Данные организованы в виде классов/объектов c их атрибутами и принципами взаимодействия согласно ООП.
- Реляционные. Данные этого вида СУБД организованы в таблицах. Таблицы могут быть связаны друг с другом, информация в них структурирована.
В цикле статей будем рассматривать именно реляционные СУБД (как самые распространённые) на примере H2 и создавать с нуля приложение, эмулирующую подобие работы биржи.
Вопрос: Почему не PostgreSQL, MySQL, MSSQL или Oracle?
Ответ: Чтобы не отвлекаться на вопросы установки отдельного комплекса программ. Дальнейшей настройки, создания БД, тонкостей работы в разных ОС, версий. Для работы с H2 необходимо совершить минимум действий. Но ничего не мешает поменять текущую H2 JDBC на реляционную СУБД другого производителя (изменяется только строка адреса сервера и имя класса драйвера).
SQL
Внешние программы формируют запросы к СУБД на языке управления данными Structured Query Language. Что такое SQL и чем отличается от привычных языков программирования? Одна из особенностей SQL – декларативность. То есть,
SQL — декларативный язык. Это значит, что, вбивая команды, то есть, создавая запросы к SQL-серверу, мы описываем, что именно хотим получить, а не каким способом. Посылая серверу запрос
SELECT * FROM CUSTOMER (приблизительный перевод с SQL на русский:
«сделать выборку из таблицы COSTUMER, выборка состоит из всех строк таблица»), мы получим данные по всем пользователям. Совершенно неважно, как и откуда сервер загрузит и сформирует интересующие нас данные. Главное – правильно сформулировать запрос.
- Что такое SQL-Сервер и как он работает? Взаимодействие с СУБД происходит по клиент-серверному принципу. Некая внешняя программа посылает запрос в виде операторов и команд на языке SQL, СУБД его обрабатывает и высылает ответ. Для упрощения примем, что SQL Сервер = СУБД.
Если вы умеете управлять легковым автомобилем одной марки, вы, скорее всего, без особых проблем сможете сесть за руль и других. Основы вождения везде одинаковы, за исключением небольших деталей. Аналогично и для SQL-серверов разных производителей — у каждого из них своя версия SQL, но она удовлетворяет заданным стандартам (SQL92, SQL2003 …). Мы будем использовать операторы и команды в рамках SQL92.
Основные SQL-операторы подразделяют на следующие группы:
- Data Definition Language (DDL) – определения данных. Создание структуры БД и её объектов;
- Data Manipulation Language(DML) – собственно взаимодействие с данными: вставка, удаление, изменение и чтение;
- Transaction Control Language (TCL) – управление транзакциями;
- Data Control Language(DCL) – управление правами доступа к данным и структурам БД.
В цикле статей мы рассмотрим первые три группы, особо уделяя внимание DML.
JDBC
В 80-е годы прошлого века персональные компьютеры типа PC XT/AT завоевали рынок. Во многом это произошло благодаря модульности их конструкции. Это означает, что пользователь мог довольно просто менять ту или иную составную часть своего компьютера (процессор, видеокарту, диски и тому подобное). Это замечательное свойство сохранилось и поныне: мы меняем видеокарту и обновляем драйвер (иногда он и вовсе обновляется сам, в автоматическом режиме). Чаще всего при таких манипуляциях ничего плохого не происходит, и существующие программы продолжат работать с обновившейся системой без переустановки.
Аналогично и для работы в Java с СУБД. Для стандартизации работы с SQL-серверами взаимодействие с ней можно выполнять через единую точку —
JDBC (Java DataBase Connectivity). Она представляет собой реализацию пакета
java.sql для работы с СУБД. Производители всех популярных SQL-серверов выпускают для них драйверы JDBC. Рассмотрим схему ниже. Приложение использует экземпляры классов из
java.sql. Затем мы передаем необходимые команды для получения/модификации данных. Далее
java.sql через
jdbc-драйвер взаимодействует с СУБД и возвращает нам готовый результат.
![Часть 1. Введение в SQL - 2]()
Для перехода на СУБД другого производителя часто достаточно сменить JDBC и выполнить базовые настройки. Остальные части программы при этом не меняются.