ПОЗНАВАТЕЛЬНОЕ Сила воли ведет к действию, а позитивные действия формируют позитивное отношение Как определить диапазон голоса - ваш вокал
Игровые автоматы с быстрым выводом Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими Целительная привычка Как самому избавиться от обидчивости Противоречивые взгляды на качества, присущие мужчинам Тренинг уверенности в себе Вкуснейший "Салат из свеклы с чесноком" Натюрморт и его изобразительные возможности Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д. Как научиться брать на себя ответственность Зачем нужны границы в отношениях с детьми? Световозвращающие элементы на детской одежде Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия Как слышать голос Бога Классификация ожирения по ИМТ (ВОЗ) Глава 3. Завет мужчины с женщиной 
Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д. Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу. Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар. | ПУБЛИКАЦИЯ БАЗ ДАННЫХ В 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 с. |