JavaRush /Java блог /Random UA /Частина 1. Введення в SQL
Marat Sadykov
41 рівень

Частина 1. Введення в SQL

Стаття з групи Random UA

JDBC. Підключення БД та створення консольної Java програми в IntelliJ IDEA

Вступ

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

Перша програма

Приступимо до практичної частини. Створимо Java-проект за допомогою IDE JetBrains IntelliJ IDEA . Зауважимо, що редакція Ultimate Edition містить у своєму складі чудовий інструмент для роботи з SQL та БД – Data Grip . Проте, вона платна для більшості користувачів. Тож нам для навчальних цілей залишається використовувати загальнодоступну IntelliJ IDEA Community Edition . Отже:
  1. Запускаємо IDE та створимо новий проект:
    Частина 1. Введення у SQL - 3

  2. Вибираємо Java-проект, вказуємо версію SDK (у прикладі JDK8, але це не критично):
    Частина 1. Введення у SQL - 4

  3. На наступному кроці вибираємо в якості типу консольне додаток :
    Частина 1. Введення у SQL - 5

  4. Вказуємо ім'я проекту, пакет та його розміщення на диску (я створив спеціально для цього окрему директорію):
    Частина 1. Введення у SQL - 6

  5. Відкладемо на хвабону IDE і завантажимо з www.h2database.com необхідний JDBC-файл для роботи з СУБД H2 (download platform independent ZIP):
    Частина 1. Введення у SQL - 7

  6. Заходимо всередину завантаженого файлу (нас цікавить jar-файл шляхом h2\bin , який нам далі знадобиться, скопіюємо його):
    Частина 1. Введення у SQL - 8

  7. Повертаємося в IDE і створюємо в корені проекту директорії: db , де будуть розміщені файли з даними СУБД; lib – тут JAR-бібліотека JDBC:
    Частина 1. Введення в SQL-9

  8. Переносимо в директорію lib jar-файл з кроку 6 і додамо його в проект як бібліотеку:
    Частина 1. Введення у SQL - 10

  9. Перейменуємо java-файл в src/sql/demo на StockExchange.java (якщо забули, ми збираємося емулювати просту «біржу»), змінимо його вміст і запустимо:
    Частина 1. Введення в SQL - 11
Тепер ми вміємо підключатися до СУБД та відключатися від неї. Кожен крок відбивається у консолі. При першому підключенні до СУБД створюється файл бази даних stockExchange.mv.db .

Розбір коду

Власне код:
package sql.demo;

import java.sql.*;

public class StockExchangeDB {
    // Блок объявления констант
    public static final String DB_URL = "jdbc:h2:/c:/JavaPrj/SQLDemo/db/stockExchange";
    public static final String DB_Driver = "org.h2.Driver";

    public static void main(String[] args) {
        try {
            Class.forName(DB_Driver); //Проверяем наличие JDBC драйвера для работы с БД
            Connection connection = DriverManager.getConnection(DB_URL);//соединениесБД
            System.out.println("Соединение с СУБД выполнено.");
            connection.close();       // отключение от БД
            System.out.println("Отключение от СУБД выполнено.");
        } catch (ClassNotFoundException e) {
            e.printStackTrace(); // обработка ошибки  Class.forName
            System.out.println("JDBC драйвер для СУБД не найден!");
        } catch (SQLException e) {
            e.printStackTrace(); // обработка ошибок  DriverManager.getConnection
            System.out.println("Ошибка SQL !");
        }
    }
}

Блок констант:

  1. DB_Driver : Тут ми визначабо ім'я драйвера, яке можна дізнатися, наприклад, клацнувши мишею на підключену бібліотеку і розгорнувши її структуру в директорії lib поточного проекту.
  2. DB_URL : Адреса нашої бази даних. Складається з даних, розділених двокрапкою:
  3. Протокол = jdbc
  4. Вендор (виробник/найменування) СУБД = h2
  5. Розташування СУБД, у разі шлях до файлу (c:/JavaPrj/SQLDemo/db/stockExchange). Для мережевих СУБД тут додатково вказуються імена чи IP адресаи віддалених серверів, TCP/UDP номери портів тощо.

Обробка помилок:

Виклик методів нашого коду може повернути помилки, на які слід звернути увагу. На цьому етапі ми просто інформуємо про них у консолі. Зауважимо, що помилки при роботі з СУБД - це найчастіше SQLException .

Логіка роботи:

  1. Class.forName (DB_Driver) – переконуємось у наявності відповідного JDBC-драйвера (який ми раніше завантажабо та встановабо).
  2. DriverManager.getConnection (DB_URL) - встановлюємо з'єднання СУБД. За переданою адресаою, JDBC сама визначить тип і місце розташування нашої СУБД і поверне Connection, який ми можемо використовувати для зв'язку з БД.
  3. connection.close() – закриваємо з'єднання з СУБД та завершуємо роботу з програмою.
У наступній частині циклу ми познайомимося з DDL-операторами та типами SQL-даних, а також створимо початкову структуру нашої БД та наповнимо її таблицями. Друга частина Третя частина
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ