Xreferat.com » Рефераты по информатике и программированию » Организация доступа к базам данных в Интернет

Организация доступа к базам данных в Интернет

описания доступа к переменным (полям то есть) класса и к его функциям (методам то есть). По умолчанию переменные и функции доступны для своего класса и всех его соседей в той же папке.

По сути класс - что это? Это сложная структура в памяти. Выделяем 4 байта для целого, 4 байта для вещественного, и описываем структуру функции для работы с ними. Но это лишь описание - реально память не выделена. Память выделяется реально - создается объект. То есть конкретный экземпляр класса. Я месяца три после процедурного программирования не мог привыкнуть к терминологии и не мог понять, зачем же это нужно! Попытаюсь вам объяснить все же побыстрее :-)

Класс "люди"

  голова

  руки

  метод_думать (увеличивает значение голова на 1)

  метод хватать (увеличивает значение рук на 1)

все

Мы все - объекты=экземпляры этого класса. Нам выделено место на земле чтобы жить, хватать и думать.

Внутри класса помимо всего прочего существует специальная функция - "конструктор" - называется функция тем же именем, что и класс (в этом примере - "люди"). Она может существовать или не существовать. Она не возвращает никакого результата и void к конструктору не надо приписывать. Она - функция-конструктор - нужна для некоторых начальных (инициализирующих) действий при создании объекта. Какие действия? Разные..

В нашем примере: конструктор присвоит головам и рукам значение "десять". Это я придумываю сам. Пусть будет так. Или пример с мышой: пусть мыша будет при инициализации располагаться в центре экрана. Кто-то должен вычислить координаты центра экрана и вызвать функцию рисования чтобы там мыша была нарисована.

Когда объект создается (человек рождается), то вызывается один-единственный раз конструктор. Если я не описал спец. конструктор, то что по умолчанию? Обычно ничего. Но если и ничего, все же по умолчанию конструктор есть. Хотя по умолчанию он ничего не совершает, ничего не возвращает, никаких аргументов не получает.

Вернемся к примеру Люди: создаем объект Миша класса Люди -

1) объявили переменную сложного типа "Люди" (так как мы писали int a;

   при объявлении переменной простого типа)

 Люди Миша;  // никакая память не выделилась, переменной

// спец_типа Люди - нет, ее "значение" - null

             // в отличие от случая простой переменной - она то

             // "инициализируется" автоматически

2) выделили оперативную память для объекта Миша:

   Миша=new Люди();

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

Разница с обычным программированием: функция делается менее универсальной. Она может работать только над данными данного объекта! Нельзя заставить функцию-метод объекта взять переменную другого объекта. (можно ей передать извне эти переменные-поля как аргументы). Зато (выигрыш) все это дело увязано в одну взаимосвязанную структуру. Еще раз: даже если метод-функцию вызвать снаружи, она чужие данные не сможет взять. А как же передают данные внутрь переменных-полей объекта? Прямой записью в поле или передачей данных внутрь через функцию-метод, ему эти данные дают в качестве аргумента.

Уничтожение объектов. В отличие от Си++ в Java нет Деструктора. Я пишу

   Миша = null;

Объект "Миша" не сразу убивается-освобождает память. Он просто лежит тут, ненужный Миша. А потом, в момент регулярной чистки памяти, его уберут. Java -машина чистит память регулярно.


Приложение 3

 Листинг программы – SearchEngein.java

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.*;

import java.util.*;

import java.lang.*;

// Класс Интерфейс

public class SearchEngein extends HttpServlet {

// Объявление глобальных переменных

Properties INIProperties = new Properties();

String query = null,    // Запрос

       value = null;    // Запрос в нужной кодировке

String dbname,   // Имя базы

       dbpath;   // Путь к базе

String dbselect; //

 byte MD  = 30,   // Код разделителя

      MD2 = 31;   // Код разделителя

String RusDos = new String("Cp866");  // Кодировка дос

String RusWin = new String("windows-1251"); // Кодировка Виндовс

String    iso = new String("8859_1"); // Кодировка Сервлета

String RusIso = new String("8859-5"); // Кодировка Исо

// конвертор кодировки из ИСО В Виндовс

private String ConvertISO(String Str) {

try {

Str = new String( Str.getBytes(iso),RusWin);}

catch( java.io.UnsupportedEncodingException e ) { return Str;}

return Str;

}

 public String getServletInfo() {

return "Поиск в базе данных ";

 }

private String RemoveTrash(String str){

return new String(str);

}

// преобразование в нижний регистр

public String toLow(String str){

char old[] = str.toCharArray();

char news[] = new char[str.length()];

char c;

for (int i =0; i<str.length(); i++){

 c = old[i];

 switch (c) {

  case 'А' : {c = 'а';break;}

  case 'Б' : {c = 'б';break;}

  case 'В' : {c = 'в';break;}

  case 'Г' : {c = 'г';break;}

  case 'Д' : {c = 'д';break;}

  case 'Е' : {c = 'е';break;}

  case 'Ё' : {c = 'ё';break;}

  case 'Ж' : {c = 'ж';break;}

  case 'З' : {c = 'з';break;}

  case 'И' : {c = 'и';break;}

  case 'Й' : {c = 'й';break;}

  case 'К' : {c = 'к';break;}

  case 'Л' : {c = 'л';break;}

  case 'М' : {c = 'м';break;}

  case 'Н' : {c = 'н';break;}

  case 'О' : {c = 'о';break;}

  case 'П' : {c = 'п';break;}

  case 'Р' : {c = 'р';break;}

  case 'С' : {c = 'с';break;}

  case 'Т' : {c = 'т';break;}

  case 'У' : {c = 'у';break;}

  case 'Ф' : {c = 'ф';break;}

  case 'Х' : {c = 'х';break;}

  case 'Ц' : {c = 'ц';break;}

  case 'Ч' : {c = 'ч';break;}

  case 'Ш' : {c = 'ш';break;}

  case 'Щ' : {c = 'щ';break;}

  case 'Ъ' : {c = 'ъ';break;}

  case 'Ы' : {c = 'ы';break;}

  case 'Ь' : {c = 'ь';break;}

  case 'Э' : {c = 'э';break;}

  case 'Ю' : {c = 'ю';break;}

  case 'Я' : {c = 'я';break;}

  default  : {news[i]=c;}

 }// switch

 news[i] = c;

}

 return new String(news);

}

//

private String TagRemove(String s){

boolean inTag = false;

boolean tag = false;

int sn = 0;

char c;

int m = s.length();

char[] cd = new char[m];

char[] old = s.toCharArray();

char cMD = (char) MD2;

for (int i=0; i<m; i++)

 {c=old[i];

 if (tag) { c=' '; tag = false; }

 else  if ( c == cMD ) { c=' '; tag = true;}

     cd[i] = c;

 }

return  new String(cd);

}

//

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 mBBK = null;      // 91

 String mKaIndex = null;  // 90

 

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

      fPosData = 0;   //

 boolean done = false,

         Avtor = false;

 int mC =0,

     mE =0;           // Счетчик

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

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

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

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

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

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;

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

               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);

               byte MarcRec[] = new byte[JIndex-24-MTemp];

               dbfile.seek(fPosData);

               dbfile.read(MarcRec);

               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];

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

               for (int PIndex = 0; PIndex < PLength; PIndex++) {

                 Pole[PIndex] = MarcRec[PStart+PIndex];

               }

                 String Pol = new String(Pole);

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

                 switch (PNum) {

                  case 100 : { mAvtor    = TagRemove(Pol.substring(5));break;}

                  case 700 : { msAvtor   = TagRemove(Pol.substring(5));break;}

                  case 245 : { mName     = TagRemove(Pol.substring(5));break;}

                  case 490 : { mSeria    = TagRemove(Pol.substring(5));break;}

                  case 91  : { mBBK      = TagRemove(Pol.substring(5));break;}

                  case 90  : { mKaIndex  = TagRemove(Pol.substring(5));break;}

                  case 260 : { mPrinter  = TagRemove(Pol.substring(5));break;}

                  case 300 : { mSize     = TagRemove(Pol.substring(5));break;}

                  case 653 : { 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=" ";

                MarcRecord Rec = new MarcRecord( mAvtor,

                                                 msAvtor,

                                                 mName,

                                                 mPrinter,

                                                 mSize,

                                                 mKey,

                                                 mSeria,

                                                 mBBK,

                                                 mKaIndex);

                 if ( Rec.rAvtor.indexOf(query)  != -1 ||

                      Rec.rsAvtor.indexOf(query) != -1 ||

                      Rec.rName.indexOf(query)   != -1 ||

                      Rec.rKey.indexOf(query)    != -1)

                     { mE++;

out.println("<table width="461" border="0" cellpadding="0" cellspacing="0">"+

"<tr bgcolor="#3399FF">"+

"<td colspan="3" class="text">&nbsp;&nbsp;&nbsp;Автор:&nbsp;"+

"<font color="#000000">"+

Rec.rAvtor+" "+

Rec.rsAvtor+

"</font></td></tr><tr>"+

"<td colspan="3" valign="top" class="bodytext">"+mE+". "+mC+

"&nbsp;<b>Название:</b>&nbsp;"+

Rec.rName+"<br>"+

Rec.rPrinter+" "+

Rec.rSize+"<br>"+

Rec.rBBK+" "+

Rec.rKaIndex+" "+

Rec.rSeria+

"</td></tr></table>");

}

            fPosMarker = fPosMarker+JIndex;

            MTemp = 0;

            MIndex = 0;

           }

       catch (IOException e) {

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

                      done=true; }

   }

 }

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

 if (mE == 0) {

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

  }

} // end If

}

// Ридер файла настройки

public void INIFile(String filename, String directory, PrintStream out) {

  DataInputStream inifile = null;

  String path = null,

  iniRecord = null,

  section = null,

  vname = null,

  vvalue = null;

  boolean done = false;

  int equalIndex = 0;

//

  if (filename.length() == 0) {

      out.println("IOError ");

      System.exit(0);

   }

  if (directory.length() == 0) { directory = new String("c:\www\db"); }

  if (filename.indexOf(".") < 0) { filename = new String(filename+".ini"); }

  path = new String(directory+System.getProperty("file.separator")+filename);

// открытие файла

 try { inifile = new DataInputStream(new FileInputStream(path)); }

 catch(FileNotFoundException e) {

     out.println(filename+"not found");

     System.exit(0);

     }

// чтение файла

 try { iniRecord = inifile.readLine(); }

 catch (IOException e) { done=true; }

 while (!done && iniRecord != null)

  { if (iniRecord.startsWith("["))

    { section = iniRecord.substring(1,iniRecord.lastIndexOf("]"));}

    else if (!iniRecord.startsWith(";"))

         { equalIndex = iniRecord.indexOf("=");

           if (equalIndex > 0)

           { //Имя ключа => Раздел.ключ

             vname = new String(section+"."+iniRecord.substring(0,equalIndex));

             vvalue = new String(iniRecord.substring(equalIndex+1));

            INIProperties.put(vname, vvalue);

           

           }

         }

  try { iniRecord = inifile.readLine(); }

  catch (IOException e) { done=true; }

 }

}

// извлечь значение

 public String getINIVar(String key, String defValue) {

  return INIProperties.getProperty(key, defValue);

 }

// извлечь значение

 public String getINIVar(String key) {

  return INIProperties.getProperty(key);

 }

public void init(ServletConfig conf) throws ServletException {

super.init(conf);

}

public void service(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

{

PrintStream out;

out = new PrintStream(res.getOutputStream());

res.setContentType("text/html; charset=Cp866");

// Печать заголовка

printPageHeader(out);

INIFile("db.ini","c:\www\db",out);

// Определяем кодировку

String requestEnc = req.getCharacterEncoding();

String clientEnc = requestEnc;

if ( requestEnc==null ) requestEnc=iso;

requestEnc=iso;

// Тело

out.println("<body bgcolor="#FFFFFF">");

out.println("<form method="get" action="/serv/SearchEngein">");

out.println("  <table width="461" border="0" cellpadding="0" cellspacing="0">");

out.println("    <tr bgcolor="#3399FF"> ");

out.println("      <td width="266" class="text">&nbsp;&nbsp;&nbsp;Запрос</td>");

out.println("      <td width="135" class="text">&nbsp;&nbsp;&nbsp;Каталог</td>  ");

out.println("      <td width="207">&nbsp;</td>");

out.println("    </tr>");

out.println("    <tr>");

out.println("      <td width="266" valign="top"> ");

out.println("        <input type="text" name="Query" maxlength="100" size="38" value="">");

out.println("      </td>");

out.println("      <td width="135" valign="top"> ");

out.println("        <select name="select" size="1">");

out.println("          <option value="MARCFILE.Book" selected>"+ConvertISO(getINIVar("KATALOG.Book"))+"</option>");

out.println("          <option value="MARCFILE.Stat">"+ConvertISO(getINIVar("KATALOG.Stat"))+"</option>");

out.println("          <option value="MARCFILE.Periud">"+ConvertISO(getINIVar("KATALOG.Periud"))+"</option>");

out.println("          <option value="MARCFILE.Podpis">"+ConvertISO(getINIVar("KATALOG.Podpis"))+"</option>");

out.println("          <option value="MARCFILE.Ucheb">"+ConvertISO(getINIVar("KATALOG.Ucheb"))+"</option>");

out.println("        </select>");

out.println("      </td>");

out.println("      <td width="207" valign="top"> ");

out.println("        <input type="submit" name="Start" value="Поиск">");

out.println("      </td>");

out.println("    </tr>");

out.println("  </table>");

out.println("  </form>");

// Конец тела

// Взять текст из строки

query = req.getParameter("Query");

 if (query == null || query.length()<1)

 {

   printPageFooter(out);

  return;

  }

dbselect = req.getParameter("select");

  value = new String(ConvertISO(query));

// Чтение файла

  dbFileRead(getINIVar(dbselect), out, value);

// Распечатка результата

printPageFooter(out);

query = null;

value = null;

}

// Вывод заголовка документа

private void printPageHeader(PrintStream out) {

out.println("<html>");

out.println("<head>");

out.println("<meta http-equiv="Content-Type" content="text/html; charset=Cp866">");

out.println("<style type="text/css">");

out.println("<!--");

out.println(".text {  font: bold 12px Arial, Helvetica, sans-serif; color: #0000FF; text-decoration: none; text-align: left; }");

out.println(".bodytext { font: 12px Arial, Helvetica, sans-serif; color: #000000; text-decoration: none; text-align: left; }");

out.println("-->");

out.println("</style>");

out.println("</head>");

}

private void printPageFooter(PrintStream out) {

 out.println("</body>");

 out.println("</html>");

 out.flush();

}

}

// Класс Запясь для хранения данных считаных из запяси

class MarcRecord {

 protected String rAvtor;     // Поле автор

 protected String rsAvtor;    // Поле соавтор

 protected String rName;      // Поле название произведения

 protected String rPrinter;   // Поле издатель

 protected String rSize;      // Поле Объем издания

 protected String rKey;       // Поле ключевые слова

 protected String rSeria;

 protected String rBBK;

 protected String rKaIndex;

  MarcRecord( String r1,

              String r2,

              String r3,

              String r4,

              String r5,

              String r6,

              String r8,

              String r11,

              String r12) {

   rAvtor   = r1;

   rsAvtor  = r2;

   rName    = r3;

   rPrinter = r4;

   rSize    = r5;

   rKey     = r6;

   rSeria   = r8;

   rBBK     = r11;

   rKaIndex = r12;

  }

}


Приложение 4

Результаты тестирования программы

Тестирование программы проводилось на 4 массивах данных размером 1000, 5000, 8366, 10000 записей. Метод тестирования заключался в поиске последней записи массива по уникальному названию, чтобы определить время поиска по всему массиву. Полученные данные приведены в таблице и на основе данных построен график (см. график).

График

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: