JDBC. Підключення БД та створення консольної Java програми в IntelliJ IDEA
Вступ
Ця стаття відкриває невеликий цикл, присвячений азам взаємодії з
базами даних (БД) Java і
введення в SQL . Багато програм зайняті обробкою та модифікацією інформації, її підтримкою в актуальному стані. Оскільки дані є дуже важливою частиною логіки програм, то під них часто виділяють окреме сховище. Інформація в ньому структурована та підпорядкована спеціальним правилам, щоб забезпечити правильність обробки та зберігання. Доступ до даних та їх зміна здійснюється за допомогою спеціальної мови запитів – SQL (Structured Query Language).
Система управління базами даних — це програмне забезпечення, яке забезпечує взаємодію різних зовнішніх програм з даними та додаткові служби (журналювання, відновлення, резервне копіювання тощо), у тому числі за допомогою SQL. Тобто програмний прошарок між даними та зовнішніми програмами з ними працюючими. У цій частині відповімо на запитання, що таке SQL, що таке SQL сервер і створимо першу програму для взаємодії з СУБД.
Види СУБД
Існує кілька видів СУБД за способом організації зберігання даних:
- Ієрархічні. Дані організовані як деревоподібної структури. Приклад - файлова система, яка починається з кореня диска і далі приростає гілками різних типів файлів і папок різного ступеня вкладеності.
- Мережеві. Видозміна ієрархічної, у кожного вузла може бути більше одного з батьків.
- Об'єктно-орієнтовані. Дані організовані у вигляді класів/об'єктів з їх атрибутами та принципами взаємодії згідно з ОВП.
- Реляційні. Дані цього виду СУБД організовано у таблицях. Таблиці можуть бути пов'язані один з одним, інформація в них структурована.
У циклі статей розглядатимемо саме реляційні СУБД (як найпоширеніші) на прикладі 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 та виконати базові налаштування. Інші частини програми при цьому не змінюються.