Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

РуководстваРуководство по JDBC v.1

Руководство по JDBC v.1


Предыдущий | Содержание | Следующий

3 - Класс DriverManager

3.1 Обзор

Класс DriverManager является уровнем управления в JDBC и находится между пользователем и драйверами. Он отслеживает все доступные драйверы и управляет установлением соединений между БД и соответствующим драйвером. К тому же, класс DriverManager заботится о таких вещах, как максимальное время логина к БД и вывод отладочной информации в журнал.

Для простых приложений единственный полезный метод в этом классе - это DriverManager.getConnection. Как можно догадаться по его имени, он устанавливает соединение с БД. JDBC позволяет пользователю вызывать также следующие методы DriverManager: getDriver, getDrivers и registerDriver, и метод connect интерфейса Driver, но в большинстве случаев лучше возложить подробности установления соединения на класс DriverManager.

3.1.1 Отслеживание доступных драйверов

Класс DriverManager хранит список объектов типа Driver, которые зарегистрировались с помощью вызова DriverManager.registerDriver. Все классы драйверов Driver должны быть написаны со статической секцией инициализации, в которой экземпляр данного класса создается и регистрируется в классе DriverManager при загрузке. Таким образом, пользователь не должен вызывать DriverManager.registerDriver непосредственно; этот вызов автоматически делается самим драйвером при загрузке класса драйвера. Класс же загружается двумя способами:

  1. С помощью вызова Class.forName. Рекомендуется именно этот способ. Следующий код загружает класс acme.db.Driver:
       
    Class.forName("acme.db.Driver");
    
    Только после этого драйвер появляется в списке зарегистрированных драйверов в классе DriverManager и становится возможным открывать соединения.

  2. Добавлением драйвера в свойство jdbc.drivers класса java.lang.System. Это список классов драйверов, разделенных двоеточиями, которых подгружает DriverManager при инициализации. Следующий пример показывает, как программист может ввести три класса драйверов в файл ~/.hotjava/properties (HotJava загружает его при запуске в системные свойства):
         
    jdbc.drivers=
      foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver
    
Первый же вызов метода класса DriverManager повлечет за собой загрузку и регистрацию этих драйверов.

Этот второй способ требует наличия постоянных настроек окружения. Если есть сомнения, что эти настройки постоянно имеются, то лучше вызывать Class.forName.

В обеих случаях за регистрацию нового драйвера отвечает сам драйвер: он должен вызывать DriverManager.registerDriver, и, как уже отмечалось, этот вызов должен происходить автоматически при загрузке класса драйвера.

С целью обоспечения безопасности уровень управления JDBC отслеживает, каким загрузчиком классов (class loader) загружен каждый драйвер. Для открытия соединений используются только драйверы, поступившие либо из локальной файловой системы, либо загруженные тем же загрузчиком, которым загружен код, запросивший соединение с БД.

3.1.2 Установление соединения

Устанавлиавать соединения с БД можно сразу после загрузки и регистрации классов Driver. Когда методу DriverManager.getConnection передается запрос на соединение с БД, DriverManager опрашивает каждый драйвер с целью определить, который из них может установить данное соединение.

Иногда может оказаться, что открыть соединения согласно данному URL могут более одного драйвера JDBC. В этом случае важен порядок, в котором происходит этот опрос, так как DriverManager будет использовать первый драйвер, откликнувшийся на URL.

Сначала DriverManager пробует все драйверы в порядке регистрации (драйверы, перечисленные в jdbc.drivers всегда загружаются первыми). Он пропускает драйверы, которым он не доверяет, то есть те, которые загружены из источника, отличного от кода, который пытается открыть соединение.

Для всех драйверов вызываются методы Driver.connect, которым передается тот же URL, что и методу DriverManager.getConnection. Первый же драйвер, который "понимает" URL, открывает соединение.

На первый взгляд, это может показаться неэффективным, но на самом деле требуется всего несколько вызовов процедур и сравнений строк для каждого соединения, так как очень сомнительно, что кому-то понадобится загружать десятки драйверов одновременно.

Следующий код демонстрирует соединение с мостом JDBC-ODBC:

// загружаем драйвер
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:fred";
DriverManager.getConnection(url, "userID", "passwd");



Предыдущий | Содержание | Следующий

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95