Глава 19. Доступ к базам данных с помощью Java Database Connectivity (JDBC)

В данной главе будут освещены следующие вопросы:

·  Что такое база данных

·  Что такое JDBC

·  Как создать базу данных с помощью JDBC и Java

·  Как заполнить базу данных информацией

·  Как использовать запросы к базе данных с помощью JDBC

·  Как обновлять информацию в базе данных, используя графический интерфейс

Хранение данных и организация доступа к ним – это одна из важнейших задач программных систем. Некоторые программные системы, например, банковские, почти полностью состоят из хранилища данных и доступа к ним. Другие программные системы, например, системы планирования и поисковые, также широко используют базы данных.

Базы данных также используются и в Java программировании. Многие Web-сайты используют сервлеты и Enterprise JavaBeans (EJB), которые работают с базами данных.

Java Database Connection (JDBC) - это подход Java к доступу к данным в базе данных. Это простой, удобный и мощный способ организации работы с базами данных.

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

История баз данных

Изначально компьютеры создавались для выполнения расчетов по сложным формулам. Одно из первых применений компьютеров – расчет траектории ракеты для точного попадания в цель.

НЕ нашли? Не то? Что вы ищете?

Сразу же после Второй мировой войны компьютеры начали использовать для обработки большого количества информации, а не сложных вычислений. Компьютеры стали применяться для управления. Данные для обработки хранились на устройствах с последовательным доступом типа перфокарт или перфолент. Позже появились магнитные ленты и диски, которые начали использовать для хранения данных.

На дисках информация была доступна в любой момент времени, причем без человеческого участия данные могли быть изменены, прочитаны и записаны. Но последовательный доступ к данным требует, чтобы подсчитывалось смещение в байтах. Если программа хочет прочитать (N+1) - ю запись, она должна пройти через N предыдущих записей. Это очень неэффективно.

Для решения проблем, связанных с организацией быстрого доступа к данным и были созданы программные продукты, называемые системами управления базами данных - СУБД (database management systems (DBMS)). В отличие от последовательных файлов базы данных хранят данные в структурированном виде. База данных состоит не только из данных, но и большого количества метаданных, схемами, индксами и т. д. Схема описывает расположение данных в рядах таблиц, а индексы обеспечивают адреса рядов в базе данных, так что непосредственный доступ к записи в базе данных оказывается возможным.

Базы данных сейчас очень популярны, и используются практически везде для хранения данных и управления ими. Рис. 19.1 показывает, как организованы базы данных и системы управления ими.

Рис. 19.1. Системы управления базами данных и их взаимодействие с программами и данными.

Ваша программа обращается к СУБД (DBMS), используя JDBC. Программное обеспечение СУБД знает точный формат таблиц в база данных. Оно использует информацию схемы и индексов для определения полей и возврату их в программу для обработки или вывода. Индексы используются для ускорения доступа к данным. Обычно индекс разрабатывается так, чтобы по указанному значению обеспечить быстрый доступ к нужной записи.

Зачем нужен JDBC

Рынок СУБД достаточно широк, многие разработчики предлагали свои программные продукты. Они различались форматами данных, API, диалектами SQL, между продуктами существовали проблемы совместимости.

Три значительных события привели к уменьшению проблемы совместимости различных форматов данных, но не устраниди ее. Первое событие было связано с публикацией статьи E. F. Codd, математика, который описал основы реляционных баз данных. Использование реляционных баз данных привело к упрощению концепции построения баз данных.

Второе событие – создание языка структурных запросов - Structured Query Language(SQL). Этот язык определил синтаксис предложений, которые используются для формирования запросов к базам данных и заменил множество языков, существующих до него.

Третье событие – это появление TCP/IP, который обеспечил соединение компьютеров между собой. TCP/IP повлиял на мир баз данных опосредованно, потому что обеспечил универсальный протокол для обмена данными между компьютерами, в результате программа на одном компьютере получила возможность запрашивать данные с другого компьютера.

Эти три события обеспечили основу для разработки JDBC драйверов для разных СУБД. JDBC предполагает, что база данных, с которой взаимодействует программа, является реляционной и использует SQL для запросов. Кроме того, все драйверы обычно написаны так, чтобы взаимодействовать в базой данных с использованием TCP/IP.

JDBC основан на подходе Open Database Connection (ODBC), введенном Microsoft в начале 1990-х годов. Как JDBC, так и ODBC предполагает существование драйверов, которые скрывают различия в диалектах SQL. Кроме того, драйвер обеспечивает связь между компьютерами, необходимую для построения распределенных систем. Конечный результат – легкость создания программ для работы с базами данных, как будто база находится на той же машине. Рис. 19.2 показывает это графически.

Рис. 19.2. Драйвер JDBC скрывает многие детали доступа к базе данных.

Java-программа выполняется на Вашем компьютере. Она содержит код на Java, который использует обращения к классам JDBC. Эти классы обеспечивают взаимодействие с драйвером JDBC. А вот драйвер содержит код, взаимодействующий с СУБД, которая может быть на этом и на другом компьютере. Используя драйвер, Ваша программа может выполнять полный объем работ с базами данных, включая создание таблиц, изменение схемы таблиц, сохранение информации, получение информации из базы данных.

Вам нужен только один драйвер JDBC для доступа к базе данных. Имеется четыре разных типа JDBC-драйверов, каждый имеет определенные преимущества:

·  Тип 1— Эти драйверы подсоединяются к СУБД через источник данных, который определяется через менеджер ODBC в MS Windows. В первое время, когда не было достаточно драйверов, такой подход считался самым обычным. Сейчас, когда драйверов много, эти используются в простейших системах и в примерах. В этом случае появляется еще один промежуточный слой – слой ODBC.

·  Тип 2— Эти драйверы вызывают методы, используя программное сетевое обеспечение на клиентской машине. Реализация этих драйверов лучше, но сложнее распространять Вашу программу, потому что клиентское программное обеспечение может не стоять на клиентской машине.

·  Тип 3— Эти драйверы написаны на чистой Java для клиентской машины. На серверной стороне есть компонент, который поддерживает связь с клиентской машиной. Такие драйверы устраняют недостаток драйверов 2-го типа.

·  Тип 4— Это самые легкие и удобные драйверы. Они написаны на Java и содержат весь код в классах. Для них не требуется никакой инсталляции ни на клиенте, ни на сервере.

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

Обычно программисты создают программы с любым доступным драйвером, а затем можно поменять его на тот, который больше подходит к разрабатываемой системе.

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

В этой главе будет использован драйвер типа 1. Этот драйвер поступает вместе с JDK для Windows.

Программирование в использованием JDBC

Это программирование достаточно просто. Все, что нужно сделать, это включить несколько строк кода для установки соединения, и Вы готовы выполнять запросы SQL. Листинг 19.1 показывает простой пример, как сделать это.

Листинг 19.1 JDBCConnection. java

import java. sql.*;

public class JDBCConnection

{

/** Default Constructor */

public JDBCConnection()

{

}

public static void main(String[] args)

{

try

{

//load the driver class

Class. forName("sun. jdbc. odbc. JdbcOdbcDriver");

//Specify the ODBC data source

String sourceURL = "jdbc:odbc:TicketRequest";

//get a connection to the database

Connection databaseConnection =

DriverManager. getConnection(sourceURL);

//If we get to here, no exception was thrown

System. out. println("The database connection is " +

databaseConnection);

}catch(ClassNotFoundException cnfe)

{

System. err. println(cnfe);

}

catch (SQLException sqle)

{

System. err. println(sqle);

}

}

}

Первый шаг в использовании драйвера – установить, какой используется. В нашем случае мы указали, что используется мостик JDBC-ODBC, драйвер, который поставляется вместе с JDK. Этот драйвер выбран, потому что он всегда доступен.

Class. forName("sun. jdbc. odbc. JdbcOdbcDriver");

Затем мы указываем имя источника данных, который мы хотим использовать. При использовании этого драйвера мы указываем JDBC как протокол, ODBC как дополнительный протокол. TicketRequest – это имя источника, как оно указано при определении его с помощью менеджера ODBC, который мы рассмотрим позже в этой главе.

String sourceURL = "jdbc:odbc:TicketRequest";

Цель этой программы – получить соединение с базой, для чего выполняется следующая строка кода:

Connection databaseConnection =

DriverManager. getConnection(sourceURL);

Мы просто получаем ссылку на объект типа Connection. Затем мы выводим информацию о соединении. Если программа выполняется без выброса исключения, то все в порядке, и соединение установлено.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4