Смекни!
smekni.com

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

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=&bsol;"461&bsol;" border=&bsol;"0&bsol;" cellpadding=&bsol;"0&bsol;" cellspacing=&bsol;"0&bsol;">"+

"<tr bgcolor=&bsol;"#3399FF&bsol;">"+

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

"<font color=&bsol;"#000000&bsol;">"+

Rec.rAvtor+" "+

Rec.rsAvtor+

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

"<td colspan=&bsol;"3&bsol;" valign=&bsol;"top&bsol;" class=&bsol;"bodytext&bsol;">"+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:&bsol;www&bsol;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:&bsol;www&bsol;db",out);

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

String requestEnc = req.getCharacterEncoding();

String clientEnc = requestEnc;

if ( requestEnc==null ) requestEnc=iso;

requestEnc=iso;

// Тело

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

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

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

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

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

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

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

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

out.println(" <tr>");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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=&bsol;"Content-Type&bsol;" content=&bsol;"text/html; charset=Cp866&bsol;">");

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

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 записей. Метод тестирования заключался в поиске последней записи массива по уникальному названию, чтобы определить время поиска по всему массиву. Полученные данные приведены в таблице и на основе данных построен график (см. график).

График