Внутренняя база данных апплета в Java

Цель занятия

Создать интерфейс для работы с базой данных апплета. Рассмотреть использование класса Hashtabie и его методов put и get, создание записей с различными типами полей, а также научиться сохранять внутреннюю базу данных в файле на диске. Дополнительные сведения можно найти в [2, 17].

Краткие теоретические сведения

Создадим апплет, который позволит пользователю работать с внутренней базой данных. Работа с базой данных предполагает построение интерфейса для добавления, удаления и поиска записей. Для реализации базы данньос апплета используем класс Hashtabie. Этот класс позволяет реализовать ассоциативное обращение к данным (для доступа к записям базы данных используются не номера записей, а содержимое полей базы данных). Таблицы Hashtable позволяют хранить данные различных типов. Доступ к данным выполняется безотносительно к их типу, поэтому нам потребуется выполнить приведение типов. То, что мы намереваемся сделать, показано на рис. 2.6 в виде окна апплета.

В апплете расположены кнопки Clear, Add, Delete, Search. Кнопка Clear используется для очистки полей текущей записи. Кнопка Add используется для добавления записи в базу. Кнопка Delete используется для удаления записи из базы. Для хранения таблицы базы данных используется класс Hashtabie с переменной bd этого класса. Класс Hashtabie является стандартным и импортируется с помощью инструкции: import java.util.*;

Рис. 2.6. Таблица базы данных апплета

У этого класса имеются удобные методы для добавления, удаления и поиска записей. Познакомимся с ними. Итак, bd — это объект класса Hashtabie. Тогда добавление записи в bd реализует команда bd.put(id,st). Здесь id- значение ключа добавляемой записи. Сама запись есть st. Заметим, что запись st состоит из полей. В примере это: имя, фамилия и группа (поанглийски: FirstName, SecondName, Group). Чтобы сформировать такую запись, объявляем класс:

class Student

protected String id; protected String fname; protected String lname; protected String group;

Student(String id, String fname, String lname, String group)

this.id=id; this.fname=fname; this.lname=lname; this.group=group;

}

} /*end of class*/

Класс student содержит строковые переменные:

protected String id;

protected String fname; protected String lname;

protected String group,

а также единственный метод — конструктор этого класса. Вспомните, что имя конструктора должно совпадать с именем класса, если конструктор есть. Таким образом, добавляемая в базу запись — это экземпляр (а точнее, объект) класса student. Вот фрагмент кода, в котором осуществляется добавление записи при нажатии на кнопку Add:

String id=idfld.getText(); if(id!=null)

{

Student st=new Student(id,fnamefld.getText(),

lnamefld.getText(), groupfld.getText());

bd.put(id,st);

}

Команда добавления записи — это bd.put(id,st). Любопытно заметить, что объекту bd не важно, какой именной объект добавляется командой put(). Поэтому Hashnabie может хранить вперемешку все — записи, числа, строки, даты, картинки. Поанглийски слово "hash" означает "мешанина". Фрагмент кода для удаления записи таков:

if (source==deletebtn)

String id=idfld.getText(); if(bd.remove(id)!=null)

{

clearFields() ; showStatus("Deleted ! ! ! ");

}

Метод ciearFieids () очищает текстовые поля после удаления записи стандартным методом bd.remove(id) класса Hashtable, который, при успешном выполнении, возвращает значение логической истины (true).

Приведем теперь полный текст программы (листинг 2.8). Заметим лишь, что в методе init() выполняется стандартный набор действий по добавлению и размещению на панели кнопок, текстовых полей, что нам уже знакомо по предыдущим занятиям.

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

Листинг 2.8. Текст приложения для работы с внутренней базой данных апплета

import java.awt.*; import java.awt.event.*; import java.util.*; import java.applet.*;

class Student

protected String id; protected String fname; protected String lname; protected String group;

Student(String id, String fname, String lname, String group)

this.id=id; this.fname=fname; this.lname=lname; this.group=group;

}

} /*end of class*/

public class lab3 extends Applet implements ActionListener {

Panel dat;

Panel but;

Hashtable bd;

TextField idfld;

TextField fnamefld;

TextField lnamefld;

TextField groupfld;

Button clearbtn;

Button addbtn;

Button deletebtn;

Button searchbtn;

public void init()

{

bd=new Hashtable(); setLayout(new BorderLayout()); dat=new Panel();

dat.setLayout(new GridLayout(4,2)); dat.add(new Label("ID")); dat.add(idfld=new TextField()); dat.add(new Label("FirstName")); dat.add(fnamefld=new TextField());

dat.add(new Label("LastName")); dat.add(lnamefld=new TextField()); dat.add(new Label("Group")); dat.add(groupfld=new TextField()); but=new Panel();

but.setLayout(new GridLayout(1,4)); but.add(clearbtn=new Button("Clear")); but.add(addbtn=new Button("Add")); but.add(deletebtn=new Button("Delete")); but.add(searchbtn=new Button("Search")); add("Center",dat); add("South",but); clearbtn.addActionListener(this) ; addbtn.addActionListener(this) ; deletebtn.addActionListener(this); searchbtn.addActionListener(this) ;

}

public void clearFields()

{

idfld.setText("") ; fnamefld.setText("") ; lnamefld.setText("") ; groupfld.setText("") ;

}

public void actionPerformed(ActionEvent ae)

{

Obj ect source=ae.getSource(); if (source==clearbtn)

{

clearFields() ;

}

else if(source==addbtn)

{

String id=idfld.getText();

if(id!=null)

{

Student st=new Student(id,fnamefld.getText(),

lnamefld.getText(), groupfld.getText());

bd.put(id,st);

}

else

{

showStatus("Need an ID");

}

}

else

if (source==deletebtn)

{

String id=idfld.getText(); if(bd.remove(id)!=null)

{

clearFields(); showStatus("Deleted ! ! ! ");

}

}

else

if(source==searchbtn)

{

String id=idfld.getText ();

Object ob=bd.get(id); if (ob!=null)

{

fnamefld.setText(((Student)ob).fname); lnamefld.setText(((Student)ob).lname); groupfld.setText(((Student)ob).group); idfld.setText(id);

else

{

showStatus("ID not found");

}

}

}

}

Для выполнения этого апплета создадим HTML-файл следующего вида:

<html>

<body>

<APPLET code="lab3.class" width=300 height=300>

</APPLET>

</body>

</html>

Параметр code в этом документе определяет имя класса, в который скомпилирован исходный файл с апплетом, приведенный в листинге 2.8.

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100