Подключение Java-программы к реляционной СУБД с помощью JDBC выполняется в три этапа:
Рассмотрим эти три этапа.
Пакет JDBC предназначен для работы с разнообразными диспетчерами СУБД от различных разработчиков. Для подключения к базе данных среда выполнения Java должна загрузить соответствующий драйвер указанной базы данных. Загрузка и выгрузка таких драйверов осуществляется с помощью класса DriverManager.
На рисунке показана схема подключения Java-программы к базе данных. Класс DriverManager имеет структуру данных, которая содержит как сами драйверы в виде объектов Driver, так и информацию о них.
Драйверы JDBC обычно создаются поставщиками СУБД. Их работа заключается в обработке JDBC-подключений и команд, поступающих от Java-приложения, и в генерации машинно-зависимых вызовов по отношению к базе данных.
Далеко не все поставщики СУБД предлагают драйверы JDBC, но как правило ими всегда поставляются драйвера ODBC (Open Database Connectivity), которые удовлетворяют стандарту Microsoft. При работе с СУБД на платформе Windows поставщик используемой СУБД почти всегда предлагает собственный драйвер ODBC. По этому проблем с подключением Java-приложения к базе данных в среде Windows обычно не возникает, чего, к сожалению, нельзя сказать о других платформах.
Загрузка драйвера может производиться как из программы, так и из командной строки.
Для загрузки драйвера-моста JDBC-ODBC из командной строки необходимо ввести следующую команду:
Java -Djdbc.drivers=sun.odbc.JdbcOdbcDriver MyApplication
Для загрузки драйвера-моста JDBC-ODBC из программы:
try { Class theDriver = sun.odbc.JdbcOdbcDriver.class; } catch(ClassNotFoundException e) { System.err.println("Драйвер JDBC/ODBC не найден"); }
После регистрации драйвера с помощью диспетчера драйверов его можно применять для подключения к базе данных. Для этого диспетчеру следует сообщить о создании нового подключения. В ответ на это диспетчер драйверов вызовет соответствующий драйвер и возвратит ссылку на установленное подключение. Для создания подключения необходимо указать место расположения базы данных, а также (как правило для большинства баз данных) учётное имя и пароль, как показано ниже.
Connection myConnection = DriverManager.getConnection( "jdbc:odbc:mydataSource", "username", "password");
После получения запроса getConnection() диспетчер драйверов анализирует значение адреса URL для JDBC и, в свою очередь, передаёт его каждому зарегистрированному драйверу. Затем подключение будет установлено с помощью того драйвера, который первым опознает данный адрес URL для JDBC и сообщит о готовности к подключению. Если ни один из драйверов не сможет опознать URL для JDBC, диспетчер драйверов инициирует обработку исключительной ситуации SQLException с выдачей сообщения об отсутствии подходящего драйвера (No suitable driver).
Объект Statement предназначен для хранения SQL-команд. При пересылке объекта Statement базе данных с помощью установленного подключения СУБД запустит заданную SQL-команду и возвратит результат её выполнения в виде объекта ResultSet.
Методы объекта statement заключаются внутри конструкции try{:} catch.
Для извлечения результатов запроса в виде объекта ResultSet следует использовать приведённый код:
ResultSet theSet = theStatement.executeQuery("SELECT * FROM *");
или
ResultSet theSet; if(theStatement.execute("SELECT * FROM *")) theSet = theStatement.getResultSet();