Опубликован: 17.08.2006 | Доступ: свободный | Студентов: 5320 / 682 | Оценка: 4.49 / 3.94 | Длительность: 20:58:00
ISBN: 978-5-9556-0078-9
Лекция 15:

Работа с базами данных

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >

Базы данных XBase

С широким распространением персональных компьютеров стал популярным формат баз данных, применяемый в "настольных" СУБД dBASE, Clipper и FoxPro, семейство которых обобщенно называется XBase. Базы данных в этом формате хранятся в таблицах с суффиксом DBF (Database File), а для работы с записями такой таблицы широко применяется произвольный доступ к отдельным записям и перебор записей в цикле. (Хотя работать с ними можно также при помощи языка реляционных запросов SQL.) Одно из средств для работы с DBF-таблицами в программах на Perl - это модуль XBase, который можно загрузить из хранилища модулей CPAN. Он предоставляет объектный интерфейс для создания и изменения баз данных в формате XBase. Например, программа создания таблицы DBF будет выглядеть так:

use XBase; # модуль работы с БД в формате DBF

   my $table = XBase->create(  # метод создания таблицы 
   "name" => "mollusc.dbf", # имя файла
      # имена полей (колонок, столбцов) таблицы:  
           "field_names" =>    ["ID", "NAME", "LATIN", "AREA"],
      # типы данных (N - число, C - строка, D - дата):
           "field_types" =>    [ "N",    "C",     "C",    "C"],
      # максимальные длины полей:
           "field_lengths" =>  [   5,     35,      30,     45],
      # длины дробной части (для чисел):
           "field_decimals" => [   0,  undef,   undef,  undef]
);
$table->close();  # метод закрытия файла БД

Далее потребуется программа добавления данных в созданную таблицу из текстового файла. Например, такая:

use XBase; # модуль работы с БД в формате DBF
my $table = new XBase "mollusc.dbf"  # конструктор DBF
               or die XBase->errstr; # обработка ошибок
my $recno = 0; # добавляемые записи нумеруются с нуля

open my $text, '<', 'mollusc.txt' or die; # файл, откуда
while (my $data = <$text>) {              # читаем данные,
   chomp($data);                          # удаляя \n
   # и разбивая строку на поля по разделителю ';':
   my ($id, $name, $latin, $area) = split(';', $data);
   # добавляем запись, указывая поля в порядке создания 
   $table->set_record($recno, $id, $name, $latin, $area);      
   $recno++; # и увеличиваем счетчик записей
}
close $text;           # закрываем тестовый файл
$table->close();       # и файл базы данных

Модуль XBase предоставляет все необходимые методы для работы с таблицами баз данных. Многие из них основаны на возможности произвольного доступа к любой записи DBF-файла по ее номеру. Например, таким образом можно прочитать, изменить или удалить запись по номеру $record_number:

# считать запись в хэш, с доступом к нему по ссылке:
my $hash_ref = $table->get_record_as_hash($record_number);
# изменить значение поля NAME на 
$table->update_record_hash($record_number, 'NAME' => $new);

# пометить запись как логически удаленную 
$table->delete_record($record_number);
# восстановить логически удаленную запись
$table->undelete_record($record_number);

По поводу двух последних операций нужно сделать следующее пояснение. Дело в том, что записи в DBF-файле не удаляются физически, а только помечаются как удаленные. "Логически" удаленные записи игнорируются при обработке данных, но существуют в таблице "физически". Поэтому запись, помеченную как удаленная, можно восстановить для дальнейшей обработки. Один из способов прочитать записи таблицы - выбрать их во временный список записей, называемый курсором, откуда последовательно извлекать их в цикле. Это делается так:

my $cursor = $table->prepare_select("NAME", "LATIN", "AREA");
while (my @record = $cursor->fetch) { # прочитать запись
   print "@record\n"; # обработать запись 
}

В модуле XBase реализовано много других методов для работы с DBF-файлами и дополняющими их индексными файлами, которые предназначены для организации быстрого поиска записей в таблице.

Но разработчики программного обеспечения давно пришли к выводу, что вместо специфических форматов данных и операций по их обработке (без которых, конечно, иногда нельзя обойтись) гораздо перспективнее применять универсальные подходы, основанные на унифицированном доступе к базам данных на базе языка SQL.

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Галина Башкирова
Галина Башкирова

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

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Константин Моренко
Константин Моренко