Министерство образования Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
“Хабаровский государственный технический университет”
ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННЫХ СИСТЕМ
Методические указания к выполнению практического задания № 5
для студентов специальности 071900 “Информационные системы
и технологии”
Хабаровск
Издательство ХГТУ
2003
УДК 681.58:681.32
Проектирование информационных систем: Методические указания к выполнению практического задания № 5 для студентов специальности 071900 «Информационные системы и технологии» / Сост. Г. К. Конопелько. – Хабаровск: Изд-во Хабар. гос. техн. ун-та, 2003. – 12 с.
Методические указания составлены на кафедре «Автоматика и системотехника». В них приводятся задание на практическую работу, требования по оформлению отчета, а также краткие общие сведения. Дается перечень рекомендованной литературы, необходимой для выполнения задания.
Печатается в соответствии с решениями кафедры "Автоматика и системотехника" и методического совета института информационных технологий.
Главный редактор Л. А. Суевалова
Редактор Т. Ф. Шейкина
Компьютерная верстка Г. К. Конопелько
Подписано в печать 21.11.03. Формат 60х84 1/16.
Бумага писчая. Гарнитура “Таймс”. Печать офсетная. Усл. печ. л. 0,7.
Тираж 100 экз. Заказ .
Издательство Хабаровского государственного
технического университета.
680035, Хабаровск, ул. Тихоокеанская, 136.
Отдел оперативной полиграфии издательства
Хабаровского государственного технического
университета.
680035, Хабаровск, ул. Тихоокеанская, 136.
© Хабаровский государственный
технический университет, 2003
Доступ к базе данных InterBase из Web-броузера
Цель работы: научиться использовать команды IBPerl для доступа к удаленной базе данных InterBase.
Введение
Практическое задание выполняется в локальной сети на рабочей станции с операционной системой Windows 95/98, 2000, XP или более поздней, с установленным сервером с операционной системой Linux версии не ниже пятой.
Порядок выполнения практического задания
1. Подготовка и допуск к работе
К выполнению практического задания допускаются студенты, которые подготовились к работе и имеют не более двух невыполненных предыдущих заданий.
Перед работой студент должен:
предъявить преподавателю полностью оформленный отчет о предыдущей работе;
ответить на вопросы преподавателя.
К работе не допускаются студенты, которые не выполнили одно из вышеперечисленных требований.
2. Отчёт по работе должен содержать следующее:
- Текст задания.
- Перечень всех использованных в практической работе команд и инструкций.
- Вывод по работе.
Общие сведения
IBPerl – это объектно-ориентированный модуль для расширения возможностей Perl 5. Этот модуль предоставляет интерфейс к клиентскому API InterBase для программирования SQL-приложений. IBPerl существует для всех платформ, на которых работает InterBase. Новейшую версию модуля IBPerl всегда можно найти в Internet по адресу http://www.karwin.com/ibperl/. Модуль IBPerl предоставляет разработчикам на платформах Unix и Windows NT широкие возможности по работе с базами данных под управлением InterBase, среди которых:
Разработка мощных и лаконичных программ на Perl, ориентированных на обработку баз данных.
Реализация CGI-скриптов для выборки и модификации данных в InterBase.
Простая разработка быстрых приложений для импорта или экспорта данных.
Написанное однажды, приложение будет работать на любой другой платформе без перекомпиляции.
Полная поддержка всех типов транзакций InterBase.
Поддержка параметризированных запросов.
Выполнение хранимых процедур.
Все операции с большими двоичными объектами (BLOB).
Модификация и удаление конкретной записи.
Поддержка всех типов данных InterBase.
Позиционирование и управление массивами.
Поддержка ролей пользователей.
Работа с национальными кодировками, в том числе поддержка русского языка.
Создание многофайловых баз данных и работа с ними.
Операции администрирования: создание резервных копий, сборка "мусора", проверка целостности, управление пользовательскими бюджетами.
Рассмотрим синтаксис некоторых команд, необходимых для установки соединения с сервером InterBase.
$IBPerl::VERSION
Скалярная переменная, содержит сведения о версии модуля IBPerl.
IBPerl::Connection
new IBPerl::Connection ( { Server, Path, User, Password, Role, Protocol, Charset, Dialect } )
Команда служит для соединения с уже существующей базой данных. Может применяться со следующими параметрами, располагаемыми в любой последовательности:
Server – имя сервера баз данных. Имя не обязательно может быть соответствующим FQDN (fully qualified domain name), т.е. именем, принятым в Internet, например, database.mycompany.com. Вполне можно обойтись простым именем, состоящим из одного слова.
Path – абсолютный путь до папки, в которой располагается база данных на сервере. На системах Windows NT либо Netware обязательным является указание буквы диска с двоеточием, например, C:\Data\Corporate\database.gdb. Данный параметр является обязательным.
User и Password используются для аутентификации соединения к базе данных. Имя пользователя и пароль должны существовать в той базе данных, к которой происходит подключение. Эти параметры также являются обязательными.
Role – дополнительный параметр для определения роли SQL (поддерживается только в InterBase 5.0 и выше).
Protocol – необязательный параметр, определяющий используемый сетевой протокол. По умолчанию – TCP/IP. Можно также использовать NetBEUI (только для InterBase под Windows) либо IPX/SPX (только для InterBase под Netware).
Charset – определяет набор символов по умолчанию. Если параметр опущен, то по умолчанию устанавливается набор символов NONE. Этот параметр не является обязательным.
Dialect – SQL-диалект, используемый по умолчанию в текущей сессии подключения к серверу.
Если соединение по какой-либо причине не удается установить, то
$db ->(Handle) создает отрицательное значение и модуль IBPerl создает сообщение о возникшей ошибке посредством конструкции $db->(Error).
Пример использования:
$db = new IBPerl::Connection(
Server => 'jupiter',
Path => '/usr/data/orderprocessing.gdb',
User => 'sysdba',
Password => 'masterkey',
if ($db->{Handle} < 0)
{ print "Connection error: $db->{Error}\n"; exit 1; }
create IBPerl::Connection ( { Server, Path, User, Password, Protocol, Cache, Page_Size, Charset, Dialect } )
Команда new, подобно create, создает соединение с удаленной базой данной. Различие является в том, что предварительно база данных создается под указанным именем.
Параметры, применяемые с данной функцией, идентичны тем, которые присутствуют у new за исключением еще одного необязательного параметра Page_Size. Page_Size определяет размер страниц в байтах во вновь создаваемой базе данных и может принимать следующие значения: 1024, 2048, 4096 или 8192. Другие значения округляются в меньшую сторону до одного из перечисленных четырех значений. Величина Page_Size, устанавливаемая по умолчанию, различается в разных версиях InterBase. Для InterBase версий 4.х и 5.х она равна 1024, а в версии 6.х – 4096.
ПРЕДУПРЕЖДЕНИЕ: команда create без предупреждения уничтожает базу данных с указанным именем, если она существует, и на ее месте создает новую пустую.
Искусственный метод для рассоединения с удаленной базой данных. Выполняется посредством прекращения действия класса Connection. В случае успешного выполнения возвращает значение 0 или отрицательное значение в противном случае.
Ошибки, возможные во время соединения с удаленной базой данных, выводятся на пользовательский экран с помощью этого класса. Применение в программе можно увидеть в вышепредставленном примере.
IBPerl::Transaction
new IBPerl::Transaction( {Database} );
Команда создает новую транзакцию путем создания объекта Transaction, для того что бы создать этот объект, необходимо иметь уже созданный объект Connection . На параметр Database необходима ссылка в объекте IBPerl::Connection.
new утанавливает $trans->{Handle} в отрицательное значение и выводит сообщение об ошибке $trans->{Error}, если невозможно создать объект Transaction.
Эта транзакция имеет жестко закодированные опции InterBase по умолчанию: прочесть/записать, ждать, фиксировать. Следующие версии IBPerl будут осуществлять методы, которые охватывают все опции InterBase.
Пример:
$tr = new IBPerl::Transaction( Database => $db);
if ($tr->{Handle} < 0)
{ print "Transaction error: $tr->{Error}\n"; exit 1; }
$trans->commit()
Виртуальная функция, которая совершает действия, указанные в контексте объекта Transaction. Изменения, сделанные в течение транзакции, не видны пользователю пока транзакция не завершится. Это сделано по умолчанию в деструкторе для объекта Transaction.
Возвращает 0 в случае успешного завершения, отрицательное значение в противном случае.
$trans->rollback()
Виртуальная функция прерывания действий, описанных в контексте объекта Transaction.
Возвращает 0 в случае успешного завершения, отрицательное значение в противном случае.
$trans->{Error}
Ошибки, возникающие в начале, при выполнении или прерывании транзакции регистрируются этим членом класса.
IBPerl::Statement
new IBPerl::Statement( { Transaction, SQL, Separator, TimestampFormat, DateFormat, TimeFormat, Dialect } );
Команда для создания объекта Statement. Statement возвращается к ссылке на транзакцию, указанную в параметре Transaction. Используется список параметров в произвольном порядке.
SQL – скаляр, содержащий SQL-выражение, которое пользователь подверждает. Синонимы: Statement, Stmt.
Separator используется, когда результаты запроса joined (объединяются) вместе в одну строку. Синоним: Sep.
TimestampFormat задает формат строки strftime(), используя TIMESTAMP-тип данных, чтобы форматировать даты,. Если вы не устанавливаете формат, IBPerl использует формат дат по умолчанию для (``%c'' to strftime()). Синонимы: TimeStampFormat, TimeStampformat, Timestampformat.
Пример:
$stmt = new IBPerl::Statement( Transaction => $tr,
SQL => $query,
TimestampFormat => '%m/%d/%y');
TimeFormat подобна TimestampFormat, но для InterBase v.6 SQL устанавливает TIME-тип данных. Синоним – Timeformat.
DateFormat подобна TimestampFormat, но для InterBase v.6 SQL устанавливает DATE-тип данных. Синоним – Dateformat.
При использовании IBPerl совместно с InterBase v.4 или v.5, DateFormat применяет тип данных DATE тех же версий. Этот тип данных идентичен SQL TIMESTAMP-типу данных в v.6.
Особое значение 'tm' для TimestampFormat, DateFormat или TimeFormat заставляет IBPerl возвращать ссылку в список. Этот список имеет такую же структуру, как и возвращаемая величина localtime(). В таблице приведены основные типы и форматы даты и времени.
Тип данных (Datatype):
|
Свойство строки формата:
(Format string property)
|
Строка формата по умолчанию:
(Default format string)
|
TIMESTAMP
|
TimestampFormat
|
%c
|
DATE
|
DateFormat
|
%x
|
TIME
|
TimeFormat
|
%X
|
Dialect – SQL-диалект в InterBase v.6. Это затрагивает интерпретацию сервером двойных кавычек, в которые заключена строка и типы данных DATE, TIMESTAMP, TIME, DECIMAL and NUMERIC. По умолчанию это свойство установлено, иначе ему присваивается значение 1. Все предыдущие версии сервера InterBase обрабатывали все значения, равные1.
New – метод, устанавливающий $stmt->{Handle} в отрицательное значение и возвращающий ошибку в $stmt->{Error}, если нет возможности инициализировать класс Statement.
$stmt->execute(@parameters)
Виртуальная функция для запуска любого SQL-утверждения.
Использует аргумент @parameters, чтобы обеспечить значения параметров для приготовленных параметрических запросов. Названий параметров в нем нет, вы должны применить значения в порядке, встречающемся в подлинном SQL-утверждении. Если вы примените скаляр, который не определен, InterBase интерпретирует его как NULL SQL-выражение.
Пример:
$stmt = new IBPerl::Statement(Transaction => $tr,
SQL => 'INSERT INTO MYTABLE VALUES ( ? )');
$stmt->execute( 47 );
Смотри laba5/example5/doc/param_insert.pl для более конкретного примера.
Если SQL–строки должны содержать одиночные кавычки (символы ‘или ’), то при вводе параметров в строке execute( ) необходимо использовать двойные кавычки вместо двух одиночных кавычек, но не двойные смежные одиночные кавычки.
Пользователь должен совершить изменения методом commit или прервать выполнение методом rollback.
execute возвращает значение 0 в случае успешного выполнения, в противном случае -отрицательное значение.
$stmt->open(@parameters)
Это устаревшая команда, поэтому вы можете использовать
$stmt->execute(@parameters) для всех типов SQL-утверждений.
Сейчас проще вызывать execute(), а в использовании open() заключается совместимость с более ранними версиями IBPerl -криптов.
Возвращает значение 0 в случае успешного выполнения, в противном случае отрицательное значение.
$stmt-> fetch(ref)
Виртуальный метод восстановления последовательной строки данных из текущих SELECT- или EXECUTE PROCEDURE-утверждений.
Возвращает значение 0 в случае успешной выборки, 100 после того, как все строки выбраны, и отрицательное значение в случае ошибки.
ref–параметр - это ссылка Perl на скаляр, список или строки информации.
Если ref ссылается на скаляр, то в результате Perl объединит (join) столбцы, используя $stmt->{Separator} как разделитель между данными.
Пример:
$stmt = new IBPerl::Statement( Transaction => $tr,
SQL => 'SELECT * FROM MYTABLE');
$stmt->fetch(\$record);
print "$record\n";
Если ref ссылается на список, то результат начинается с 0 и по порядку, определяемому в виде отобранного списка, определяемого запросом.
Пример:
$stmt = new IBPerl::Statement( Transaction => $tr,
SQL => 'SELECT * FROM MYTABLE');
$stmt->fetch(\@record);
print "$record[0]\n";
Если ref ссылается на беспорядочный список, ответ состоит из ключевых имен столбцов в порядке, отобранном запросом.
Пример:
$stmt = new IBPerl::Statement( Transaction => $tr,
SQL => 'SELECT * FROM MYTABLE');
$stmt->fetch(\%record);
print "$record{QTY}\n";
Смотри laba5/example5/doc/select.pl для более детального примера.
$stmt->update(%hash)
Виртуальная функция для выполнения модификации записи, выбранной курсором. Аргумент хешированного массива устанавливается парами ключевых значений, где хэш-ключи - имена столбцов в записи, и хэш-величины - новые значения, которые вы назначаете выходным столбцам.
Пример:
$stmt = new IBPerl::Statement( Transaction => $tr,
SQL => 'SELECT * FROM MYTABLE FOR UPDATE');
$stmt->fetch();
$stmt->update( QTY => 95 );
Вы должны использовать FOR UPDATE-предложение в вашем запросе для использования метода update(). IBPerl возвращает ошибку, если не включено в update() предложение FOR UPDATE.
Если SQL–строки должны содержать одиночные кавычки (символы ‘или ’), то при вводе параметров в строке update() необходимо использовать двойные кавычки вместо двух одиночных кавычек, но не двойные смежные одиночные кавычки.
Смотри laba5/example/doc/pos_upd.pl для более детального примера.
Таким способ могут быть модифицированы запросы только к одной таблице.
$stmt->delete
Виртуальная функция для стирания записи, выбранной курсором.
Пример:
$stmt = new IBPerl::Statement( Transaction => $tr,
SQL => 'SELECT * FROM MYTABLE FOR UPDATE');
$stmt->fetch();
$stmt->delete();
Вы должны использовать FOR UPDATE-предложение в запросе для использования метода delete(). IBPerl возвращает ошибку, если не включено в delete() предложение FOR UPDATE..
Смотри laba5/example/doc/pos_del.pl для более детального примера.
$stmt->close
Виртуальный метод, закрывающий и освобождающий statement. Это делается по умолчанию в деструкторе для объекта Statement.
Возвращает 0 при успешном завершении и, наоборот, возвращает отрицательное значение.
$stmt->{SQL}
Член класса содержит SQL-утверждение.
$stmt->{Stmt_type}
Член класса, который содержит тип утверждения. Это может быть SELECT, INSERT, UPDATE, DELETE, EXEC_PROCEDURE. А также содержит информацию определения языка утверждения, такого, как CREATE, ALTER, DROP или иного, поддерживаемого в используемой версии SQL.
@$stmt->{Values}
Член класса, который обеспечивает доступ к массиву, созданному в течение fetch.
@$stmt->{Columns}
Член класса, который обеспечивает доступ к массиву, столбцов имен, созданных в течение fetch.
@$stmt->{Nulls}
Член класса, который обеспечивает доступ к массиву, содержащему состояние столбцов типа null /non-null, созданных в течение fetch. Значение 1 означает, что передаваемое поле имеет пустое значение (NULL); величина 0 означает, что передаваемое поле не NULL.
@$stmt->{Lengths}
Член класса, который обеспечивает доступ к массиву длины данных столбцов, созданных в течение fetch.
@$stmt->{Datatypes}
Элемент класса, который обеспечивает доступ к массиву названий (имен) datatype- столбцов, созданных в течение fetch. Величины: SMALLINT, INTEGER, QUAD, FLOAT, D_FLOAT (только VMS), DATE, TIME, CHAR, INT64 (только InterBase v.6), DOUBLE PRECISION, TIMESTAMP, VARCHAR, CSTRING, BLOBID, BLOB.
@$stmt->{Scales}
Элемент класса, который обеспечивает доступ к массиву значений масштаба для каждого столбца, созданного в течение fetch.
Для столбцов NUMERIC(x,y) или DECIMAL(x,y) масштаб только нулевой (“y” не может принимать значение нуль).
$stmt->{Executed}
Свойство “только для чтения”, которое сообщает о числе раз выполненной инструкции. Например, инструкция с входными параметрами могла бы быть выполнена много раз до того, как прекратиться.
$stmt->{Fetched}
Свойство “только для чтения”, которое сообщает о числе записей, выбранных запросом.
$stmt->{Error}
Ошибки, которые возникают в течение создания или выполнения инструкции, записываемые в этом элементе класса.
Примеры использования команд IBPerl можно посмотреть в папке /laba5/Example5/doc.
Описание структуры и состава баз данных InterBase можно прочитать в методических указаниях к практическому заданию № 6 «Разработка программы управления БД InterBase с архитектурой «клиент-сервер»».
Пример выполнения задания находится в папке /laba5/Example5.
Задание
Разработать web-страницу, на которой разместить компоненты для выполнения следующих функций:
создания новой удаленной базы данных InterBase на сервере 62.76.207.201 в личном каталоге,
создания в созданной базе данных одной таблицы,
просмотра всех записей в таблице,
удаления одной записи в таблице,
очистки всей базы данных,
добавления записи в таблицу,
выборки (поиска) по значению одного из полей таблицы.
Таблица должна содержать минимум 5 строковых полей, 2 – цифровых, 1 – для хранения двоичных файлов (рисунков, фотографий).
Для выполнения каждой из названных функций разработать отдельный скрипт на языке Perl.
Отладить скрипты. Убедиться в работоспособности системы и продемонстрировать ее работу преподавателю.
Составить отчет по лабораторной работе.
Контрольные вопросы
Назначение компонента IBPerl.
Команды работы с базами данных.
Передача SQL-команд через IBPerl.
Библиографический список
Шумаков П. В. Delphi 3 и создание приложений баз данных / П. В. Шумаков. – М.: Нолидж, 1999. – 420 с.
«Microsoft Knowledge Base», Web-сервер корпорации Microsoft, http://www.microsoft.com/rus/support/kbrus.htm.
Маслов В. В. Введение в Perl, Web-сервер Citforum http://www.citforum.ru/ internet/perl_tut/ index.shtml.
Федосеева А. Спецификация языка Perl, Web-сервер Citforum http://www.citforum.ru/database/cnit/p2.shtml.
Чекалов А. Прагматический подход к разработке приложений Web баз данных, Web-сервер Citforum http://www.citforum.ru/internet/webdbapp/ index.shtml.
Встроенная справочная система операционной системы Windows и C++Builder5.
Гроф Джеймс Р. SQL: Полное руководство / Джеймс Р. Гроф, П. Н. Вайнберг – М.: Изд. группа BHV, 1999. – 608 с.
Ланг Курт. Публикация баз данных в Интернет / Курт Ланг, Дж. Чоу. – СПб.: Символ:Невский диалект, 1998. – 480 с.
Грабер М. Введение в SQL: Пер. с англ. / М. Грабер. – М.: ЛОРИ, 1996. – 375 с.
PL/SQL. Справ. рук. Версия 2.3: Пер. с англ. – М.: АО "РДТЕХ", 1997. – 450 с.
Артемов Д. В. Microsoft SQL Server 7.0 для профессионалов + CD-ROM. Установка, упр., эксплуатация, оптимизация / Д. В. Артемов. – М.: АО "РДТЕХ", 1999. – 557 с.
Власов А. И. Краткое практическое руководство разработчика по языку PL/SQL / Власов А. И. – М.: Машиностроение, 2000. – 63 c.
Сервер Oracle 8. Справ. рук. по яз. SQL: Версия 8.0. – М.: РДТеХ, 1999. – 470 с.
Баженова И. Ю. Visual FoxPro 3.0 / И. Ю. Баженова. – М.: АО "Диалог-МИФИ", 1996. – 286 с.
SQL* Menu. Версия 5.0. Краткий справочник разработчика: Пер. с англ. – М.: АО "РДТеХ", 1994. – 15 с.
Дунаев С. Б. Borland-технологии SQL-Link. Interbase. Paradox for Windows. Delphi / С. Б. Дунаев. – М.: АО "Диалог-МИФИ", 1996. – 288 с.
Грофф Д. Р. SQL. Полное рук.: Учеб. пособие / Д. Р. Грофф. – М.: BHV, 2001. – 816 с.
SQL* Net for Windows. Рук. пользователя : Версия 2.2 : Учет. номер А31936-1: Пер. с англ. – М.: АО "РДТеХ", 1995. – 25 с.
Тихомиров Ю. В. Microsoft SQL Server 7.0. Разраб. прил. / Ю. В. Тихомиров. – СПб.: БХВ-Санкт-Петербург, 1999. – 352 с.
Дворжецкий А. В. SQL: Structured Query Language (Структуризированный язык запросов). Обзор языка, использование инструкций, модификация хранимых данных / А. В. Дворжецкий. – М.: Познават. кн. Плюс, 2001. – 415 с.
Шнайдер Р. Д. Microsoft SQL Server. Проектирование высокопроизводительных баз данных: Пер. с англ. / Р. Д. Шнайдер. – М.: Лори, 1998. – 361 с.
Архангельский А. Я. Язык SQL в С++Builder 5 / А. Я. Архангельский. – М.: Бином, 2000.– 216 с.
Волкова И. А. Модельный SQL-интерпретатор / И. А. Волкова. – М.: Диалог-МГУ, 1999. – 30 с.
Vaughn, W. R. Hitchhiker's guide to Visual Basic and SQL server (Путеводитель по Visual Basic и серверу SQL). – М.: Microsoft press, 1996. - 620 p.
Бирн Д. Л. Microsoft SQL Server. Рук. администратора: Пер. с англ. / Д. Л. Бирн. – М.: ЛОРИ, 1998. – 211 с.
Знакомство с SQL Net. Версия 2.1. – М.: АО "РДТеХ", 1996. – 130 с.
|