Посібник з JDBC v

2.1.1 Відкриття з'єднання

Користувач може пропустити цей керуючий рівень JDBC і безпосередньо викликати методи класу Driver для відкриття з'єднання. Це може бути потрібним у тих поодиноких випадках, коли два або більше драйвера можуть обслужити заданий URL, але користувач хоче вибрати конкретний з них. Тим не менш, набагато простіше покласти цю роботу на клас DriverManager.

Наступний код демонструє відкриття з'єднання з БД, що знаходиться за URL-адресою "jdbc:odbc:wombat" , з ім'ям користувача "oboy" і паролем "12Java" :

2.1.2 "URL" у звичайному використанні цього терміну

Перша частина URL визначає протокол, який використовується для доступу до інформації, і завжди закінчується знаком ":". Серед протоколів найбільш популярні "ftp" ("file transfer protocol" - протокол передачі файлів), і "http" ("hypertext transfer protocol" - протокол передачі гіпертексту). Протокол "file" означає, що ресурс знаходиться у локальній файловій системі, а не в Інтернеті. Приклади URL:

Решта URL, - те, що після першого двокрапки, - це те місце, де знаходиться джерело даних. У разі протоколу "file" решта URL - це шлях до файлу. Для протоколів ftp і http частина URL, що залишилася, ідентифікує хост (ім'я сервера) і необов'язковий шлях до конкретного сайту або файлу. Наприклад, нижче наведено URL-адресу домашньої сторінки фірми JavaSoft. Ця URL-адреса вказує лише ім'я хоста:

2.1.3 JDBC-URL

Так як JDBC-URL використовуються з різними драйверами, вони повинні неминуче бути дуже гнучкими. По-перше, вони допускають використання різними драйверами різних схем іменування баз даних. Наприклад, підпротокол odbc дозволяє використовувати значення атрибутів URL.

По-друге, JDBC-URL дають можливістьрозробникам jdbc-драйверів кодувати всю потрібну для з'єднання інформацію з URL.

По-третє, за допомогою JDBC-URL можна здійснити "перенаправлення": JDBC-URL може посилатися на логічний хост або ім'я БД, яке динамічно транслюється в даний ім'я за допомогою мережевої служби імен. Таким чином, можна уникнути безпосереднього призначення хоста в JDBC URL. Існує кілька мережевих сервісів імен (DNS, NIS та DCE).

Стандартний синтаксис JDBC URL показано нижче. Він має три частини, розділених двокрапкою:

JDBC URL складається з:

  1. jdbc – протоколу. Протокол, що використовується в JDBC URL - завжди jdbc.
  2. (Підпротоколу) - це ім'я драйвера або ім'я механізму з'єднання з БД. Підпротокол може підтримуватись одним або декількома драйверами. Приклад підпротоколу, що лежить на поверхні, - це "odbc", відведений для URL, що позначають ім'я джерела даних ODBC. Наприклад, для доступу до БД через міст JDBC-ODBC потрібно використовувати URL такого виду: У цьому прикладі підпротокол заданий як "odbc", а піднімання "fred" є локальним джерелом даних.

Якщо комусь захочеться використовувати сервіс імен (тобто ім'я БД в JDBC-URL не буде дійсним ім'ям БД), то підпротоколом може бути сервіс імен:

У цьому прикладі URL вказує локальний сервіс імен DCE, який повинен дозволити ім'я БД "accounts-payable" більш певне ім'я, яке далі буде використовуватися для підключення до БД.

2.1.4 Підпротокол "odbc"

Приклади коректних JDBC-URL для підпротоколу odbc наведені нижче:

2.1.5 Реєстрація підпротоколів

2.1.6 Виконуємо SQL-запити

У JDBC є три класи для посилки SQL-запитів у БД і три методи в інтерфейсі Connection створюють екземпляри цих класів. Ці класи таметоди, що їх створюють, перераховані нижче:

  1. Statement - створюється методом createStatement. Об'єкт Statement використовується при простих запитах SQL.
  2. PreparedStatement - створюється методом prepareStatement. Об'єкт PreparedStatement використовується в SQL запитах з одним або більше вхідними параметрами (IN parameters). PreparedStatement містить групу методів, що встановлюють значення вхідних параметрів, які надсилаються до БД під час виконання запиту. Примірники класу PreparedStatement розширюють (успадковуються) Statement і, отже, включають методи Statement . Об'єкт PreparedStatement потенційно може бути більш ефективним, ніж Statement , оскільки він перекомпілюється та зберігається для майбутнього використання.
  3. CallableStatement - створюється методом prepareCall. Об'єкти CallableStatement використовуються для виконання т.зв. збережених процедур - іменованих груп SQL-запитів, на зразок виклику підпрограми. Об'єкт CallableStatement успадковує методи обробки вхідних (IN) параметрів з PreparedStatement , а також додає методи обробки вихідних (OUT) та вхідних-вихідних (INOUT) параметрів.
Нижченаведений список дає уявлення про те, який саме з методів об'єкта Connection краще використовувати для створення різних SQL-запитів:

Метод createStatement використовується для

  • простих SQL-виразів (без параметрів)

Метод preparationStatement використовується для

  • SQL-виразів з одним або більше вхідним (IN-) параметром
  • простих SQL-виразів, які виконуються часто

Метод prepareCall використовується для

  • виклику процедури, що зберігається

2.1.7 Транзакції

Кожне нове стандартне з'єднання знаходиться в режимі автофіксації(auto-commit), що означає автоматичну фіксацію (commit) транзакції після кожного запиту. І тут транзакція складається з одного запиту. Якщо auto-commit заборонено, транзакція не закінчується аж до явного виклику commit або rollback, включаючи, таким чином, усі вирази, виконані з моменту останнього виклику commit або rollback. У цьому випадку всі SQL-запити в транзакції фіксуються або відкочуються групою.

Метод фіксації commit робить остаточними всі зміни в БД, виконані SQL-виразом, і знімає також блокування, встановлені транзакцією. Метод rollback проігнорує, "відбракує" ці зміни.

Іноді користувачеві потрібно, щоб будь-яка зміна не набула чинності доти, доки не набуде чинності попередня зміна. Цього можна досягти забороною auto-commit та угрупуванням обох запитів в одну транзакцію. Якщо обидві зміни відбулися успішно, то викликається метод commit, який переносить ефект від цих змін БД; якщо один або обидва запити не пройшли, то викликається метод rollback, який повертає колишній стан БД.

Більшість JDBC-драйверів підтримують транзакції. Насправді драйвер, який відповідає специфікації JDBC, повинен підтримувати їх. Інтерфейс DatabaseMetaData надає інформацію про рівні ізольованості транзакцій, які підтримуються цією СУБД.

2.1.8 Рівні ізольованості транзакцій

Що рівень ізольованості транзакцій, то більше уваги СУБД приділяє усунення конфліктів. Інтерфейс Connection визначає п'ять таких рівнів. Мінімальний їх відповідає випадку, коли транзакції не підтримуються зовсім, а максимальний - неможливості існування більше однієї транзакції у час. Зазвичай, що вищий рівень ізольованості, топовільніше виконується додаток (через надмірне блокування та зменшену конкурентність користувачів). При виборі конкретного рівня ізольованості розробник повинен знайти золоту середину між потребами у продуктивності та вимогами до цілісності даних. Очевидно, що рівні, що реально підтримуються, залежать від можливостей використовуваної СУБД.

Під час створення об'єкта Connection його рівень ізольованості залежить від драйвера або бази даних. Користувач може викликати метод setIsolationLevel , щоб змінити рівень ізольованості транзакцій, і нове значення рівня буде встановлено до кінця сесії. Щоб встановити рівень ізольованості тільки для однієї транзакції, необхідно встановити його перед виконанням транзакції та відновити колишнє значення після її завершення. Зміна рівня ізольованості під час самої транзакції небажана, оскільки відбудеться автоматичний виклик commit, що спричинить фіксацію змін. Попередній Зміст Наступний

Warning: mysql_connect() [function.mysql-connect]: Не потрібно підключатися до місцевого MySQL сервера через сокет '/tmp/mysql.sock' (2) in/pub/ home/javaport/javaportal/books/show2b.phpon line11

Warning: mysql_db_query() [function.mysql-db-query]: Не потрібно підключатися до місцевого MySQL сервера через сокет '/tmp/mysql.sock' (2) in/pub/home /javaport/javaportal/books/show2b.phpon line19

Warning: mysql_db_query() [function.mysql-db-query]: На link для сервера не буде встановлено в/pub/home/javaport/javaportal/books/show2b.phpon line19

Warning: mysql_fetch_array(): supplied argument is not avalid MySQL result resource in/pub/home/javaport/javaportal/books/show2b.phpon line30Дізнайся про що ти насправді зараз думаєш тут.

[an error occurred while processing this directive]

Warning: mysql_connect() [function.mysql-connect]: Не потрібно підключатися до місцевого MySQL сервера через сокет '/tmp/mysql.sock' (2) in/pub/ home/javaport/javaportal/news/worldnews.phpon line91