Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Стрельников О.И. Основы web-технологий.doc
Скачиваний:
99
Добавлен:
02.05.2014
Размер:
648.7 Кб
Скачать

4. Публикация баз данных в internet

Публикация баз данных в Internet является одной из наиболее популярных и быстро развивающихся отраслей Web. Под публикацией БД в Internet будем понимать создание программного обеспечения, позволяющего частично или полностью осуществлять работу с удаленной БД при помощи клиента Web. Как правило, при публикации предоставляется возможность просмотра содержимого БД, однако в общем случае подразумевается также возможность модификации и администрирования БД. Публикация в Internet подразумевает также публикацию в локальных сетях, созданных по технологии Internet (Intranet). С точки зрения создания программного обеспечения БД, публикацию БД можно рассматривать с двух сторон:

  1. Создание программного обеспечения БД, формирующего отчеты в виде документов HTML.

  2. Создание Web-интерфейса к БД.

Публикация в Internet имеет следующие преимущества по сравнению с обычными локальными и сетевыми БД:

  1. возможность удаленного доступа к БД через глобальную или локальную сеть;

  2. использование преимуществ протокола HTTP при передаче различной, в том числе мультимедийной, информации;

  3. наличие стандартного интерфейса у БД.

Web-интерфейс является стандартом де-факто для любого программного обеспечения, в том числе БД.

Существует два основных подхода к публикации БД в Internet. Первый подход подразумевает формирование статических документов HTML из содержимого БД с последующим доступом к сформированным документам при помощи сервера Web. При модификации содержимого БД осуществляется обновление документов HTML. Программу, осуществляющую преобразование содержимого БД в набор документов HTML, будем называть преобразователем. На рис. 4 показано взаимодействие программ при публикации БД в Internet в рамках первого подхода.

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

Второй подход состоит в динамической генерации документов HTML в соответствии с запросами пользователя Web. При запросе пользователя к БД сервер Web запускает программу, которая передает запрос БД, получает ответ, формирует в соответствии с полученным ответом документ HTML и отправляет его клиенту Web. Программа, осуществляющая работу с БД, может быть создана с использованием любой технологии стороны сервера (например, CGI), либо быть сценарием стороны сервера (например, PHP). На рис. 5 показано взаимодействие программ при публикации БД в Internet с использованием технологии CGI.

Приложение CGI фактически является в данном случае посредником между СУБД и клиентом Web. Архитектура системы на рис. 5 является трехзвенной, в отличие от двухзвенной архитектуры "Клиент-Сервер". Общий вид трехзвенной архитектуры изображен на рис. 6.

При публикации БД вInternet с использованием технологии CGI тонким клиентом является клиент Web, толстым клиентом – приложение CGI, а сервером – СУБД, которая в данном случае называется сервером баз данных.

Приведенные два подхода к публикации БД в Internet могут комбинироваться. В любом случае, при публикации существует программа, которая обращается к СУБД для работы с БД. Как правило, взаимодействие между программой, работающей с БД, и СУБД осуществляется посредством запросов на каком-либо языке запросов. Стандартным языком запросов является язык SQL. Данный язык содержит команды создания таблиц и схемы БД, добавления записей в таблицу, извлечения данных из БД, модификации и удаления записей в таблице. SQL запросы передаются от приложения к серверу БД посредством какого-либо зависящего от реализации сервера средства межпроцессного взаимодействия. Наиболее перспективным является использование интерфейса сокетов, поскольку в этом случае запросы могут передаваться между различными хостами. Существуют также реализации СУБД в виде библиотек статической компоновки. В этом случае код СУБД входит в код программы, работающей с БД, что приводит к увеличению размера загрузочного модуля приложения и неэффективному расходу памяти. Поэтому такой способ реализации СУБД целесообразно применять только для однозадачных операционных систем.

Программный интерфейс сервера БД зависит от реализации. Как правило, производители СУБД поставляют вместе с сервером БД библиотеки, в которых реализован API для доступа к БД. Ниже приведен список наиболее распространенных в настоящее время СУБД (серверов БД):

BDE;

ODBC;

InterBase Server;

Microsoft SQL Server;

MySQL;

mSQL;

PostgreSQL;

SyBase;

Informix;

Oracle.

Программный интерфейс, как правило, включает средства инициализации СУБД, установления связи с БД, передачи запросов БД и разбора ответов от сервера. Рассмотрим подробнее API некоторых серверов БД.

Фирма Inprise поставляет вместе со своей СУБД BDE два программных интерфейса различного уровня. Программный интерфейс низкого уровня (IDAPI) - это библиотека функций для доступа к базам данных в различных форматах. Интерфейс высокого уровня - это библиотека компонентов для сред визуального программирования Delphi и C++Builder, которая использует интерфейс низкого уровня. В табл. 13 приведены основные классы библиотеки компонентов BDE.

Таблица 13

Основные классы библиотеки компонентов BDE

Название класса

Описание

TDataModule

Контейнер для хранения остальных компонентов BDE

TDatabase

База данных. Содержит название БД или папку с таблицами БД

TQuery

SQL запрос. Включает содержимое запроса и метод для его отправки серверу

TDataSet

Набор данных. Включает данные, полученные от сервера в качестве ответа

Вместе с сервером MySQL фирмы TcX поставляется библиотека, реализующая API для доступа к БД MySQL. В табл. 14 приведены основные функции этой библиотеки.

Таблица 14

Основные функции библиотеки MySQL

Функция

Описание

MYSQL *mysql_init(

MYSQL *mysql);

Инициализация структуры MYSQL для последующего подключения к СУБД

MYSQL *mysql_connect(

MYSQL *mysql,

const char *host,

const char *user,

const char *passwd);

Установка соединения с СУБД без соединения с БД

int mysql_create_db(

MYSQL *mysql,

const char *db);

Создание новой БД. Возвращает 0 в случае успешного завершения

int mysql_select_db(

MYSQL *mysql,

const char *db);

Установить соединение с БД. Возвращает 0 в случае успешного завершения

Продолжение табл. 14

Функция

Описание

int mysql_query(

MYSQL *mysql,

const char *query);

Отправить запрос SQL. Возвращает 0 в случае успешного завершения

int mysql_real_query(

MYSQL *mysql,

const char *qyery,

unsigned int length);

Отправить запрос SQL, содержащий двоичные данные. Возвращает 0 в случае успешного завершения

MYSQL_RES *

mysql_store_result(

MYSQL *mysql);

Получить результат последнего запроса

unsigned int

mysql_num_fields(

MYSQL_RES *result);

Количество полей в полученном результате

int mysql_num_rows(

MYSQL_RES *result);

Количество записей в полученном результате

MYSQL_FIELD *

mysql_fetch_fields(

MYSQL_RES *result);

Возвращает массив структур MYSQL_FIELD, содержащих поля полученного ответа

MYSQL_ROW

mysql_fetch_row(

MYSQL_RES *result);

Выбрать текущую запись из набора и переместить указатель на следующую запись

void mysql_data_seek(

MYSQL_RES *res,

unsigned int offset);

Перемещение указателя в наборе данных на указанную позицию

my_bool mysql_eof(

MYSQL_RES *res);

Возвращает ненулевое значение, если указатель набора данных перемещен за последнюю запись в наборе

void mysql_free_result(

MYSQL_RES *result);

Освобождает память, занятую результатами последнего запроса

Окончание табл. 14

Функция

Описание

int mysql_drop_db(

MYSQL *mysql,

const char *db);

Уничтожение БД. Возвращает 0 в случае успешного завершения

unsigned int mysql_errno(

MYSQL *mysql);

Возвращает номер последней ошибки

char *mysql_error(

MYSQL *mysql);

Возвращает строку с сообщением о последней ошибке

void mysql_close(

MYSQL *mysql);

Разрыв соединения с сервером БД

Внастоящее время также разработаныAPI доступа к БД для сценариев стороны сервера, в частности, для PHP. Взаимодействие программ при публикации БД с использованием технологии PHP изображено на рис. 7.

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

В табл. 15 приведены основные функции для доступа к БД MySQL.

Таблица 15

Основные функции PHP для доступа к БД MySQL

Функция

Описание

int mysql_affected_rows(int [link_identifier] )

Количество столбцов, использованных предыдущими mysql операциями

int mysql_close(int [link_identifier] )

Закрывает mysql соединение

int mysql_connect(string [hostname] [:port] , string [username] , string [password] )

Открывает соединение с mysql сервером

int mysql_create_db(string database name, int [link_identifier] )

Создает базу данных mysql

int mysql_data_seek(int result_identifier, int row_number)

Перемещает внутренний указатель результата

int mysql_db_query(string database, string query, int [link_identifier] )

Посылает mysql запрос

int mysql_drop_db(string database_name, int [link_identifier] )

Удаляет базу данных mysql

int mysql_errno(int [link_identifier] )

Возвращает номер сообщения об ошибке предыдущей операции mysql

string mysql_error(int [link_identifier] )

Возвращает текст сообщения об ошибке предыдущей операции mysql

array mysql_fetch_array(int result)

Выбрать результат как ассоциативный массив

object mysql_fetch_field(int result, int [field_offset] )

Получает информацию о столбце из результата и возвращает ее как объект

Продолжение табл. 15

Функция

Описание

array mysql_fetch_lengths(int result)

Получает максимальный размер данных для каждого выходного значения

object mysql_fetch_object(int result)

Получает строку результата как объект

array mysql_fetch_row(int result)

Получите строку результата как пронумерованный массив

string mysql_field_name(int result, int field_index)

Получает имя определенного поля в результате

int mysql_field_seek(int result, int field_offset)

Устанавливает указатель запроса в определенное поле

string mysql_field_table(int result, int field_offset)

Получает имя таблицы, в которой находится указанное поле

string mysql_field_type(int result, int field_offset)

Получает тип указанного поля в результате

string mysql_field_flags(int result, int field_offset)

Получает флаги, связанные с указанным полем в результате

int mysql_field_len(int result, int field_offset)

Возвращает длину указанного поля

int mysql_free_result(int result)

Освобождает память результата

int mysql_insert_id(int [link_identifier] )

Получает id сгенерированный предыдущим выполнением SQL-запроса INSERT

int mysql_list_fields(string database_name, string table_name, int [link_identifier] )

Показывает список полей mysql в результате запроса

int mysql_list_dbs(int [link_identifier] )

Показывает список доступных Баз Данных на сервере

int mysql_list_tables(string database, int [link_identifier] )

Показывает список таблиц в базе данных mysql

Окончание табл. 15

Функция

Описание

int mysql_num_fields(int result)

Получает количество полей в результате

int mysql_num_rows(int result)

Получает количество столбцов в результате

int mysql_pconnect(string [hostname] [:port] , string [username] , string [password] )

Открывает устойчивое соединение с mysql-сервером

int mysql_query(string query, int [link_identifier] )

Отправляет SQL-запрос на mysql

int mysql_result(int result, int row, mixed field)

Получает данные результата

int mysql_select_db(string database_name, int [link_identifier] )

Выбирает Базу Данных mysql

string mysql_tablename(int result, int i)

Получает имя таблицы, содержащей указанное поле

Более подробную информацию о доступе к базам данных MySQL из сценариев PHP можно получить в руководствах по СУБД MySQL и языку интерпретатора PHP.

Литература

1. Золотов С. Протоколы Internet. – СПб.: BHV – Санкт-Петербург, 1998. – 304 с.

2. Семенов Ю. А. Протоколы и ресурсы Internet. – М.: Радио и связь, 1996. – 320 с.

3. Фролов А. В., Фролов Г. В. Сервер Web своими руками. ­– М.: ДИАЛОГ-МИФИ, 1997. (Библиотека системного программиста, т. 29).

4. Браун М., Ханнатт Д. HTML 3.2 в подлиннике. – СПб.: BHV – Санкт-Петербург, 1997.

5. Фролов А. В., Фролов Г. В. Javascript. – М.: ДИАЛОГ-МИФИ, 1998. (Библиотека системного программиста, т. 34).

6. Тихомиров Ю. Microsoft SQL Server 7.0 в подлиннике. – СПб.: BHV – Санкт-Петербург, 1999. – 720 с.

7. Яргер Р., Риз Дж., Кинг Т. MySQL и mSQL. Базы данных для небольших предприятий и Интернета – СПб.: Символ-Плюс, 2000. – 560 с.

8. Фролов А. В., Фролов Г. В. Microsoft Visual J++. Создание приложений и аплетов на языке Java. В 2-х ч. – М.: ДИАЛОГ-МИФИ, 1997. (Библиотека системного программиста, т. 30, 32).

9. Фролов А. В., Фролов Г. В. Разработка приложений для Internet. – М.: ДИАЛОГ-МИФИ, 1997. – 286 c. (Библиотека системного программиста, т. 31).

10. Храмцов П. Б. Лабиринт Internet. Практическое руководство. – М.: ”Электронинформ”, 1996. – 256 c.

11. Джамса К., Коуп К. Программирование для Internet в среде Windows: Пер. с англ. – СПб.: Питер, 1996. – 688 с.

12. Барфилд Э., Уолтерс Б. Программирование "клиент-сервер" в локальных вычислительных сетях: Пер. с англ. – М.: Информационно-издательский дом "Филинъ", 1997. – 424 с.