Jdbc приклад

У прикладі розглядається взаємодія відразу з декількома СУБД (oracle, ms sql, postgresql, mysql, derby) з підключення до сервера, створення і видалення схеми (бази даних), створення і видалення таблиці. При невеликій доробці можна одночасно працювати відразу з декількома різнотипними реляційними СУБД. Приклад створений з використанням всіх основних принципів ООП (об'єктно-орієнтоване програмування) - інкапсуляція-успадкування-поліморфізм.

На сайті наводиться також приклад записи файлів в бінарні (BLOB) і символьні (CLOB / TEXT) поля баз даних Oracle і MySQL, який можна побачити тут.

опис прикладу

На скріншоті представлений JDBC приклад в середовищі розробки Eclipse.

Jdbc приклад

Розглянутий JDBC приклад включає кілька програмних модулів, що реалізують принципи ООП:

  • dao_base.java - базовий клас визначення властивостей і функцій доступу до сервера БД;
  • dao_oracle.java, dao_mssql.java, dao_postgres.java, dao_mysql.java, dao_derby.java - класи, успадковують властивості базового класу і реалізують функції доступу до конкретного сервера БД;
  • test_jdbc.java - модуль тестування.

В директорії lib розміщуються драйвери JDBC різних провайдерів БД. У прикладі використовувалися наступні сервера баз даних. Oracle 10g Express Edition і MySQL 5.1

Додатково приклад включає СУБД Apache Derby (директорія db), яка поряд з драйверами JDBC включена в вихідний код прикладу. СУБД Derby працює в режимі "EmbeddedDriver", тобто запускається під керуванням віртуальної машини JVM разом з прикладом. Приклад можна використовувати для розробки і налагодження додаткових функцій. Вихідний код прикладу у вигляді проекту Eclipse можна скачати тут.

Базовий клас, dao_base.java

Базовий клас є абстрактним, що включає два абстрактних методу setURL () і getConnection (). Дані методи, що визначають рядок підключення URL до сервера БД і повертають об'єкт підключення Connection до сервера СУБД, повинні бути реалізовані в "спадкоємців".

Метод Connect () реєструє драйвер JDBC і визначає властивості підключення.

У зв'язку з тим, що синтаксис створення схеми бази даних CREATE SCHEMA (і видалення "DROP SCHEMA") різних СУБД має відмінності, то в базовому класі визначено методи createSchema (final String schema) і dropSchema (final String schema), які повинні бути перевизначені в успадковують класах.

Метод execSQL (final String sql) використовується для виконання СУБД транзакцій. У разі виникнення помилки транзакції в консоль виводиться код і повідомлення про помилку.

Модулі доступу до СУБД

Модулі доступу до серверів СУБД успадковують властивості базового класу і реалізують його функції.

Вихідний код dao_oracle.java

При створенні об'єкта в батьківський конструктор передається опис драйвера. Метод setURL () визначає рядок підключення до сервера СУБД. Об'єкт підключення connection створюється з рідного для драйвера класу - для Oracle це OracleConnection.

У зв'язку з тим, що в Oracle схема пов'язана, як правило, з обліковим записом користувача і створюється, "можна сказати", при створенні користувача (при створенні користувачем першого об'єкта), то в модулі dao_oracle функції створення та видалення схеми не перевизначені.

Вихідний код dao_mssql.java

У конструкторі класу визначена рядок опису драйвера. Формат рядка підключення URL до сервера БД MS SQL представлений в методі setURL (String host, String database, int port). Якщо найменування бази даних "database" визначити, то підключення буде виконано до безпосередньої базі даних, в іншому випадку до сервера.

Вихідний код dao_postgres.java

PostgreSQL на відміну від інших реляційних СУБД дозволяє створювати кілька баз даних "DATABASE", які є контейнерами схем "SCHEMA". База даних "postgres" створюється за умовчанням. У нашому модулі доступу ми не розглядаємо питання створення бази даних, який практично нічим не відрізняється від створення схеми. За замовчуванням ми будемо підключатися до БД "postgres", всередині якої будемо створювати схему.

Вихідний код dao_mysql.java

В СУБД MySQL поняття бази даних "DATABASE" і схеми "SCHEMA" можна сказати є синонімами. Тому в синтаксисі створення бази даних можна використовувати як "CREATE DATABASE database_name", так і "CREATE SCHEMA schema_name".

Вихідний код dao_derby.java

Відмітна особливість СУБД Derby в режимі "EmbeddedDriver" полягає в тому, що вона працює під управлінням віртуальної машини JVM разом з прикладом. Для доступу до цієї СУБД в "dao_derby" необхідно в рядку підключення визначити шлях до БД. У нашому прикладі вона розташовується разом з додатком.

Для тестування модулів доступу до серверів СУБД звичайно необхідно використовувати JUnit тести. Але це не так наочно. Використання JUnit при розробці програми представлено на сторінці Тестування програми, JUnit. У вихідні коди приклад як зразок включений тест підключення до сервера БД Apache Derby. Дана СУБД обрана в якості прикладу, оскільки керується тією ж JVM, що і додаток і не вимагає додаткової установки сервера СУБД.

У модулі тестування "test_jdbc.java" визначимо масив параметрів підключення до сервера СУБД.

Параметри підключення "params" потрібно налаштувати. Для цього необхідно в першому полі вказати HOST сервера СУБД. Для MSSQL неоходімо поряд з хостом вказати відповідний сервіс сервера СУБД. У другій колонці необхідно тільки підкоригувати SID сервера Oracle. У тестовому прикладі вказується SID сервера розробника "XE". Для Derby вказано відносний шлях до БД. У наступних 2-х колонках необхідно привести відповідні значення логіна і пароля. В останній колонці вказується значення прапора активності ACTIVE, який дозволяє виключити сервер з тестування. Дані параметри підключення використовуються в процедурі підключення createConnecion, якій необхідно передати модуль доступу і ідентифікатор СУБД:

Додатково визначаємо прапори створення об'єктів (схеми, таблиці) і текстові константи, які використовуються при виведенні повідомлень.

SQL-скрипти створення і видалення таблиці:

У SQL-скрипти присутні символи '% s', які повинні бути замінені або на найменування схеми, або на порожній символ.

Процедура створення схеми і таблиці createObjects

У процедурі "createObjects" схема створюється у всіх СУБД за винятком Oracle.

Після створення схеми СУБД MySQL і MSSQL виконуємо перепідключення до новоствореної схемою для створення таблиці. В СУБД PostgreSQL і Derby створюємо таблицю із зазначенням найменування схеми, тобто "MEDIA" .USERS.

Процедура видалення схеми і таблиці dropObjects

Процедура спочатку видаляє таблицю, після чого видаляє схему, якщо СУБД НЕ Oracle. Для видалення схеми в MS SQL необхідно "відключитися" від схеми, в іншому випадку буде помилка з повідомленням, що видалити неможливо в зв'язку з наявними підключеннями.

Вихідний код dao_derby.java

У вихідних кодах наведемо лише опис конструктора "test_jdbc". Всі інші, які використовуються в прикладі змінні і методи, представлені вище.

У конструкторі в циклі виконується створення об'єкта "dao", після чого виконується підключення до сервера БД, створюється схема і таблиця у новоствореній схемі. Після цього новостворені об'єкти видаляються і "dao" відключається від сервера СУБД.

На наступному скріншоті представлені повідомлення даного JDBC приклад в консолі Eclipse.

Jdbc приклад

Схожі статті