410013796724260
• Webmoney
R335386147728
Z369087728698
Класс DriverManagerКласс DriverManager является уровнем управления JDBC, отслеживает все доступные драйверы и управляет установлением соединений между БД и соответствующим драйвером. Прежде чем подключаться к серверу БД необходимо определиться с соответствующим драйвером JDBC, который представляет собой *.jar файл. В следующей таблице представлен список jdbc.drivers для нескольких СУБД.
Примечание : Для подключения драйвера лучше всего разместить его в одной из поддиректорией приложения и прописать в classpath. При использовании IDE для разработки приложения подключение драйвера JDBC можно выполнить через интерфейс среды разработки. Загрузка драйвера JDBCDriverManager.registerDriverЧтобы сказать диспетчеру драйверов JDBC, какой именно драйвер следует загрузить, необходимо выполнить одну из команд :
Команды все равнозначны. Задача заключается в том, чтобы classloader загрузил нужный драйвер. Например : Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Загрузка драйвера JDBC может производиться и другим способом. При вызове Java машины (JVM) можно указать в значении специального системного свойства jdbc.drivers название класса JDBC драйвера: java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver myClass В этом случае при первой попытке установления соединения с базой данных менеджер драйверов автоматически сам загрузит класс указанный в системном свойстве jdbc.drivers. Выбирайте любой способ, ориентируясь на то, нужно ли вам будет в дальнейшем переходить на другую СУБД. Если да, то, второй способ будет предпочтительнее. Особенно для тех, кто пишет программы для широкой публики. А ей свойственно желать самолй выбирать, чем пользоваться. Примечание : если при выполнении программы вы получаете ошибку No driver available - это, скорее всего, означает, что вы просто неправильно указалт путь к драйверу в переменной CLASSPATH. Классы драйверов JDBC разрабатываются со статической секцией инициализации, в которой экземпляр определенного класса создается и регистрируется в классе DriverManager при загрузке. Таким образом, приложение может не вызывать DriverManager.registerDriver непосредственно. Этот вызов автоматически делается самим драйвером при загрузке класса драйвера. Для обеспечения безопасности управления драйвером JDBC DriverManager отслеживает, каким загрузчиком классов ClassLoader загружен драйвер. При открытии соединения с сервером БД используется только драйвер, поступивший либо из локальной файловой системы, либо загруженные тем же ClassLoader'ом, которым загружено приложение, запросившее соединение с БД. Соединение с сервером БДDriverManager.getConnectionУстанавливать соединения с БД можно сразу после регистрации драйвера JDBC. Для этого следует вызвать метод DriverManager.getConnection, которому передаются параметры соединения с БД. DriverManager опрашивает каждый зарегистрированный драйвер с целью определения, какой из них может установить данное соединение. Может оказаться, что установить соединение согласно параметрам URL могут более одного драйвера JDBC. В этом случае важен порядок, в котором происходит этот опрос, так как DriverManager будет использовать первый драйвер, откликнувшийся на URL. Мост JDBC-ODBC-BridgeПолучить доступ к серверу базы данных можно с использованием моста JDBC - ODBC. Программа взаимодействия между драйвером JDBC и ODBC была разработана фирмой JavaSoft в сотрудничестве с InterSolv. Данная "связка" реализована в виде класса JdbcOdbc.class (для платформы Windows JdbcOdbc.dll). При использовании JDBC - ODBC необходимо принимать во внимание, что помимо JdbcOdbc-библиотек должны существовать специальные драйвера (библиотеки), которые реализуют непосредственный доступ к базам данных через стандартный интерфейс ODBC. Как правило эти библиотеки описываются в файле ODBC.INI. На внутреннем уровне JDBC-ODBC-Bridge преобразует методы Java в вызовы ODBC и тем самым позволяет использовать любые существующие драйверы ODBC, которых к настоящему времени накоплено в изобилии. Однако, чаще всего, все-таки используется механизм ODBC благодаря его универсальности и доступности. Особенности использования JDBC-ODBCJDBC DriverManager является "хребтом" JDBC-архитектуры, и его основная функция очень проста - соединить Java-программу и соответствующий JDBC драйвер и затем "выйти из игры". Структура драйвера ODBC была взята в качестве основы JDBC из-за его популярности среди независимых поставщиков программного обеспечения и пользователей. Но может возникнуть законный вопрос - а зачем вообще нужен JDBC? не легче ли было организовать интерфейсный доступ к ODBC-драйверам непосредственно из Java? Путь через JDBC-ODBC-Bridge, как ни странно, может оказаться гораздо короче. С чем это связано:
Следующий код демонстрирует соединение с сервером БД с использованием моста jdbc-odbc-bridge : import java.net.URL; import java.sql.*; import java.io.*; class SimpleSelect { public static void main (String args[]) { String url = "jdbc:odbc:dBase"; String query = "SELECT * FROM users"; try { // Загрузка jdbc-odbc-bridge драйвера Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); DriverManager.setLogStream(System.out); // Попытка соединения с драйвером. Каждый из // зарегистрированных драйверов будет загружаться, пока // не будет найден тот, который сможет обработать этот URL Connection con = DriverManager.getConnection (url, "username", "password"); // Если соединиться не удалось, то произойдет exception (исключительная ситуация). // Получить DatabaseMetaData объект и показать информацию о соединении DatabaseMetaData dma = con.getMetaData (); // Печать сообщения об успешном соединении System.out.println("\nConnected to " + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); System.out.println("Version " + dma.getDriverVersion()); // Закрыть соединение con.close(); } catch (SQLException e) { System.out.println ("\n*** SQLException caught ***\n"); while (e != null) { System.out.println ("SQLState: " + e.getSQLState ()); System.out.println ("Message: " + e.getMessage ()); System.out.println ("Vendor: " + e.getErrorCode ()); e = e.getNextException (); } } catch (java.lang.Exception ex) { e.printStackTrace (); } } В случае применения моста jdbc-odbc-bridge в URL-строку подставляется DSN (Data Source Name), т.е. имя ODBC-источника из ODBC.INI файла. Пример динамической загрузки JDBC-драйвера рассмотрен здесь. |