Java та JDBC, Частина II

У розділі 13СіC++, ми познайомили вас з C API для MySQL і mSQL. На жаль, кожен API дозволяє писати програми тільки для тієї бази даних, яку він підтримує. Якщо ви збираєтеся переносити програму між MySQL і mSQL або, того гірше, хочете, щоб вона працювала на Oracle, Sybase або з будь-якої іншої СУБД, вам необхідно переписати свій код так, щоб він використовував фірмовий API цього ядра. Однак Java-програмісти здебільшого позбавлені проблем переносимості на іншу базу даних. Вони мають єдиний API, Java DataBase Connectivity API (JDBC), що забезпечує їх уніфікованим інтерфейсом до всіх SQL-баз даних.

Оскільки JDBC є єдиним інтерфейсом до всіх баз даних, достатньо вивчити його, щоб писати програми, які працюватимуть як з MySQL, так і з mSQL. Насправді якщо належним чином використовувати JDBC, то написані вами на Java додатки зможуть працювати з будь-якою СУБД. Якщо у вас є доступ до інших баз даних, крім MySQL та mSQL, можете перевірити вірність цього твердження, запустивши приклади цього розділу з іншою базою даних.

Як і всі Java API, JDBC є набором класів та інтерфейсів, які в сукупності підтримують певний набір функцій. У разі JDBC ці функції забезпечують доступ до бази даних. Класи та інтерфейси, що становлять JDBC API, є, таким чином, абстракціями понять, загальних при доступі до баз даних будь-якого типу. Наприклад, Connection є інтерфейсом Java, що представляє з'єднання з базою даних. Аналогічно ResultSet представляє результуючий набір даних, що повертається командою SQL SELECT. Класи, що утворюють JDBC API, знаходяться в пакеті Java, SQL, який був введений Sun в JDK 1.1.

Природно, що конкретні деталі доступу добазі даних залежить від її виробника. JDBC фактично не має стосунку з цими деталями. Більшість класів у пакеті Java.sql є інтерфейсами без реалізації. Реалізація цих інтерфейсів здійснюється виробником бази даних як драйвера JDBC. Як програміст баз даних вам потрібно знати дуже небагато щодо драйвера, який ви використовуєте, — все інше робиться через інтерфейси JDBC. Специфічна інформація про базу даних, яка необхідна для використання JDBC, включає:

  • URL для драйвера JDBC.
  • Ім'я класу, що реалізує Java. SQL. Driver.

У нову специфікацію JDBC 2.0 включено необов'язкове для реалізації виробниками баз даних стандартне розширення API. Якщо постачальник бази даних JDBC реалізував це стандартне розширення, вам навіть не потрібно знати JDBC URL або реалізацію класу Driver. Це розширення передбачає наявність класу DataSource, який можна знайти на ім'я в каталозі з підтримкою JNDI.

Обидва ці елементи можна отримати під час виконання з командного рядка або файлу властивостей. Сам код програми не посилається на ці два елементи, що залежать від реалізації. Ми пояснимо, що роблять JDBC URL та клас Driver у тих параграфах, де розповідатимемо про з'єднання з базами даних. На малюнку 14-1 представлено схему інтерфейсів JDBC.

JNDI - Java Naming and Directory Interface (інтерфейс імен та каталогів Java) API. Він дозволяє запам'ятовувати об'єкти Java у службі імен та каталогів, такий як сервер Lightweight Directory Access Protocol (полегшений протокол доступу до каталогів - LDAP), та знаходити їх на ім'я.

З'єднання з базою даних

Насамперед потрібно з'єднатися з базою даних. Один з небагатьохреалізованих у пакеті Java. SQL. package класів - це клас DriverManager. Він підтримує список реалізацій JDBC і забезпечує створення з'єднань з базами даних на основі JDBC URL, які він повідомляє. URL для JDBC має виглядjdbc:protocol:subprotocol.Він повідомляє DriverManager, з якою СУБД потрібно з'єднатися, і передає йому дані, необхідні здійснення з'єднання.

Зміст слова "driver" в JDBC залежить від контексту. При написанні в нижньому регістрі JDBC driver є зборами класів, що в сукупності реалізують всі інтерфейси JDBC і забезпечують додаток доступом хоча б до однієї бази даних. При написанні Driver з великої літери мається на увазі клас, що реалізується Java. SQL. Driver. І нарешті, JDBC надає інтерфейс DriverManager, за допомогою якого можна вести облік усіх різних реалізацій Driver.

Частина URL, що позначає протокол, посилається на конкретний драйвер JDBC. Що стосується MySQL і mSQL протоколами єту sqlіmsqlвідповідно. Субпротокол повідомляє дані сполуки, специфічні для реалізації. Для з'єднання з MySQL та mSQL потрібні ім'я вузла та ім'я бази даних. Додатково може знадобитися номер порту, якщо базове ядро ​​запущено не як root. Тому повна URL для mSQL виглядає як, наприклад,jdbc:msql://athens.imagi-nary.com: 1114/test.Він повідомляє DriverManager про необхідність знайти драйвер JDBC для mSQL і з'єднатися з базою даних test наathens.imaginary.comчерез порт 1114. Це робиться шляхом єдиного звернення до методу getConnection() інтерфейсу DriverManager. У прикладі 14-1 показано, як здійснити з'єднання з базою даних mSQL.

Приклад 14-1.Уривок коду з прикладів, що надаються з драйвером JDBC для mSQL, що показує, якздійснити з'єднання

Connection con = null;

// Ось JDBC URL для цієї бази даних

String url = "jdbc:msql://athens.imaginary.com:1114/db_test";

//0 тому, що роблять класи Statement і ResultSet, нижче Statement stmt; ResultSet rs;

// Передати це як властивість, тобто.

// або завантажити, як зроблено в цьому прикладі