45049 (664171), страница 7

Файл №664171 45049 (Организация доступа к базам данных в Интернет) 7 страница45049 (664171) страница 72016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

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

public void dbFileRead(String dbNamePath, PrintStream out, String query) {

Сперва производится инициализация всех переменных используемых при работе процедуры.

Первый блок. Переменные для занесения значений полей

String mAvtor = null; // 100

String msAvtor = null; // 700

String mName = null; // 245

String mPrinter = null; // 260

String mSize = null; // 300

String mKey = null; // 653

String mSeria = null; // 490

String mRubrika = null; // 650

String mBBK = null; // 91

String mKaIndex = null; // 90

Второй блок. Файловые переменные для перемещения по файлу

long fPosMarker = 0, // Позиция относительно начала

fPosData = 0; // Начальная позиция данных

boolean done = false;

Третий блок. Перемнный для работы с данными

int mC =0, // Счетчик прочитанных записей

mE =0; // Счетчик найденых соответствий

byte Jumper[] = new byte[5]; // Размер запяси - символьный

int JIndex = 0, // Размер запяси - числовой

JTemp = 0, // Размер данных + словарь

MIndex = 0, // Счетчик для массива

MTemp = 0; // Счетчик полей

Начало выполнени поика. Сперва проверяется имеет ли запрос query занчение неравное пусто, если условие выполняется и запрос имеет не нуливое занчение устанавливается связь с файлом данных. Начальная позиция чтения равна нулю.

if (query != null){

try { RandomAccessFile dbfile = new RandomAccessFile(dbNamePath,"r");

// Цикл чтения файла по маркерам

while (fPosMarker != dbfile.length()) {

try { mC++;

dbfile.seek(fPosMarker);

dbfile.read(Jumper);

String jBuf = new String(Jumper);

JIndex = Integer.parseInt(jBuf,10);

int b = 0;

Прочитав начальный блок из 5 символов говорящий о длине записи он преобразуется из символьного значенья в числовое. Затем определяется длинная словаря которая равна 12*n, где n – равно количеству заполненных полей в одной записи.

// Поиск конца словаря

while ( b != MD){

dbfile.seek(fPosMarker+24+MIndex);

b = dbfile.read();

MTemp++;

MIndex = MTemp;

}

MTemp= MTemp - 1;

Определив конечную позицию словаря производится считывание в массив блока состоящего из данных - метка поля; начальная позиция поля, относительно конца словаря; длинная поля и символах.

// чтение Словаря из файла в отдельный массив

byte Dic[] = new byte[MTemp];

dbfile.seek(fPosMarker+24);

dbfile.read(Dic);

// чтение полей данных из файла в массив

fPosData = fPosMarker+24+MTemp;

String sDic = new String(Dic);

int DI2 = 0,

DI3 = 0,

DI4 = 0,

DI5 = 0,

PNum = 0, // Номер поля числовой

PLength = 0, // Длинна поля числовая

PStart = 0; // Начальная позиция поля чиловая

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

// сканирование номеров полей

while ( DI2 != MTemp){

DI3=DI2+3;

String DStr = sDic.substring(DI2,DI3);// Номер поля

DI4=DI3+5;

String DStr2 = sDic.substring(DI3,DI4);// Начальная позиция

DI5=DI4+4;

String DStr3 = sDic.substring(DI4,DI5);// Длинна поля

DI2=DI2+12;

PLength = Integer.parseInt(DStr3,10);// Узнаем длинну поля

PStart = Integer.parseInt(DStr2,10);// Узнаем начало поля

PNum = Integer.parseInt(DStr,10);// Код

byte Pole[] = new byte[PLength];

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

// Чтение поля из файла

switch (PNum) {

case 100 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mAvtor = TagRemove(Pol.substring(5));break;}

case 700 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

msAvtor = TagRemove(Pol.substring(5));break;}

case 245 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mName = TagRemove(Pol.substring(5));break;}

case 490 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mSeria = TagRemove(Pol.substring(5));break;}

case 91 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mBBK = TagRemove(Pol.substring(5));break;}

case 90 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mKaIndex = TagRemove(Pol.substring(5));break;}

case 260 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mPrinter = TagRemove(Pol.substring(5));break;}

case 300 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mSize = TagRemove(Pol.substring(5));break;}

case 653 : {

dbfile.seek(fPosData+PStart);

dbfile.read(Pole);

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

mKey = TagRemove(Pol.substring(5));break;}

default : {}

}// switch

}// конец проверки полей

Получив все данные которые нас интересовали, создается запись состоящая из нескольких полей.

if ( mAvtor == null) mAvtor=" ";

if ( msAvtor == null) msAvtor=" ";

if ( mName == null) mName=" ";

if ( mPrinter == null) mPrinter=" ";

if ( mSize == null) mSize=" ";

if ( mKey == null) mKey=" ";

if ( mKaIndex == null) mKaIndex=" ";

if ( mBBK == null) mBBK=" ";

if ( mSeria == null) mSeria=" ";

Это собственно самая запись

MarcRecord Rec = new MarcRecord( mAvtor,

msAvtor,

mName,

mPrinter,

mSize,

mKey,

mSeria,

mBBK,

mKaIndex);

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

String q = toLow(query);

String p01 = toLow(Rec.rAvtor);

String p02 = toLow(Rec.rsAvtor);

String p03 = toLow(Rec.rName);

String p04 = toLow(Rec.rKey);

Затем распознанные данные сравниваются с запросом, сравнивание производится только с несколькими полями. Список полей приведен ниже:

100 – Автор

700 – Второй автор

245 – Название произведения

653 – Ключевые слова

if ( p01.indexOf(q) != -1 ||

p02.indexOf(q) != -1 ||

p03.indexOf(q) != -1 ||

p04.indexOf(q) != -1)

{ mE++;

При совпадении запись сразу же отправляется браузеру для отображения в читабельной для пользователя форме.

out.println("

"+

""+

" Автор: "+

""+

Rec.rAvtor+" "+

Rec.rsAvtor+

""+

""+mE+". "+mC+

" Название: "+

Rec.rName+"
"+

Rec.rPrinter+" "+

Rec.rSize+"
"+

Rec.rBBK+" "+

Rec.rKaIndex+" "+

Rec.rSeria+

"");

}

В конце обработки одной записи независимо соответствовала она запросу или нет производится переход к следующей записи.

fPosMarker = fPosMarker+JIndex;

MTemp = 0;

MIndex = 0;

}

В случае ошибки (исключительной ситуации) цыкал обработки записи, прерывается и выдается сообщение об ошибки.

catch (IOException e) {

out.println("Ошибка!!!"+"
");

done=true; }

}

}

Если же файл отсутствует то программа выдаст сообщение о том что файл базы данных отсутствует на сервере.

catch (IOException e) { out.println("Ошибка доступа к "+dbNamePath); }

}

if (mE == 0) {

out.println("Запос: "+query+" не найден");

} // end If

}

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

100 – Автор

700 – Второй автор

245 – Название произведения

490 – Серия

91 – Индекс ББК

90 – Каталожный индекс

260 - Издательство

300 – Объем, размер

653 – Ключевые слова

Код вывода в HTML формате выглядит так:

out.println("

"+

""+

" Автор: "+

""+

Rec.rAvtor+" "+

Rec.rsAvtor+

""+

""+mE+". "+mC+

" Название: "+

Rec.rName+"
"+

Rec.rPrinter+" "+

Rec.rSize+"
"+

Rec.rBBK+" "+

Rec.rKaIndex+" "+

Rec.rSeria+

"");

После чего программа производит считывание и обработку следующей записи. Более детально алгоритм расписан в листинге программы (см. прил.3), а результаты теста программы (см. прил. 4)

Заключение

Глобальная информатизация общества приводит к тому, что потребность в информации, растет с каждым новым пользователем сети. При этом задачей специалистов в области информационных технологий обеспечить пользователей полной и достоверной информацией путем простого и удобного для пользователей доступа к накопленным массивам данных.

Главной задачей данной дипломной работы было создание программного интерфейса к существующей библиографической базе данных. Применение передовых технологии программирования позволили разработать программу, позволяющую производить поиск интересующей информации в базе данных не только по отдельно взятым ключевым словам, но и полному названию документа. Тестирование программы на массиве из 8366 записей показало, что поиск документа в конце массива занимает 2 минуты 16 секунд. Естественно, что при увеличении количества записей время обработки также будет увеличиваться. Массив данных, на котором проводилось тестирование, является реальной базой данных библиотеки ВСГАКиИ. Для того чтобы программа могла работать стабильно и с минимальными затратами времени на обработку запроса, нужно использовать ее на машине, обладающей большим быстродействием. Тестирование производилось на компьютере с такой конфигурацией: AMD K6-233, ОЗУ 64 Mb, Жесткий диск 2 Gb, под управлением операционной системы Windows NT 4.0 с установленным SP6a. Развитие направления связанного с поиском информации в массивах данных библиотек очень эффективно, так как потребность в этой информации через сеть Интернет возрастает с каждым новым пользователем.

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

Литература

  1. Глушаков С.В., Ломотьков Д.В. Базы данных: Учебный курс. – К.: Абрис, 2000. -504с.

  2. Джейсон Мейнджер. Java: основы программирования :Пер. с англ. - К.: Издательская группа BHV,1997.-320с.

  3. Пригорьев Ю.А. Проблемы выбора доступа к данным при проектировании информационных систем на основе СУБД//Информационные технологии. - 1999 - №5. С. 4-10.

  4. Симкин Стив, Бартлет Нейл, Лесли Алекс. Программирование на Java. Путеводитель :Пер. с англ. – К. НИПФ «ДиаСофт Лтд», 1996. 736 с.

  5. Кристиансен Т., Торкингтон Н. Perl: Библиотека программиста :Пер. с англ.- СПб.: Издательство «Питер», 2000. – 736с.: ил.

  6. Холзнер Стивен. Perl: специальный справочник :Пер. с анг. – СПб.: Питер, 2000. – 496с.: ил.

  7. Хейл, Бернард Ван. JDBC: Java и базы данных :Пер. с англ. М.,1999.-320с.

  8. Эферган М. Java: справочник. – СПб.: Питер, 1998. -448с.: ил.

  9. http://www.java.sun.com

  10. http://www.sun.ru/java/start/intro/history.html

  11. http://www.logos.com/marc/

  12. http://www.rba.ru:8101/rusmarc/

  13. http://httpd.apache.org/dist/httpd/binaries/win32/old/apache_1_3_14_win32_r2.exe

  14. http://java.apache.org/jserv/dist/ApacheJServ-1.1.2-2.exe

  15. http://www.netcraft.com/Survey

  16. http://www.apache.org

  17. http://java.apache.org

  18. http://www.ruslibnet.ru/

Приложение 1

Спецификация формата RUSMARC

РОССИЙСКИЙ КОММУНИКАТИВНЫЙ ФОРМАТ

ОФИЦИАЛЬНАЯ ИНФОРМАЦИЯ

Характеристики

Тип файла
Документ
Размер
1,09 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6525
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее