Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BDlab / 4__db2.docx
Скачиваний:
67
Добавлен:
18.03.2015
Размер:
51 Кб
Скачать
☆

4. Порядок выполнения работы

А. Создание и заполнение базы данных

1. Запустить инструментарий Центр управления DB2:

Пуск | Программы | IBM DB2 | DB2COPY1 (по умолчанию) |

Общие инструменты управления | Центр управления ►

ф. Вид Центра управления ← Расширенный; кн. OK ►

ф. Центр управления – DB2COPY1

2. Создать новую базу данных Edu:

ф. Центр управления – DB2COPY1 | раскр. Центр управления |

пр. кн. мыши на Все базы данных | выбр. Создать базу данных | Стандартную ►

ф. Мастер создания новой базы данных | 1. Имя ► Имя базы данных ← Edu;

снять Разрешить использование XML в базе данных; кн. Готово►

ф. Ход работы – Создание базы данных Edu; дождаться закрытия ►

3. В базе данных с помощью конструктора таблиц создать структуру таблицы Students (справочник студентов):

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Таблицы | пр. кн. мыши на Таблицы | Создать… ► ф. Мастер по созданию таблиц | вкл. Имя | Имя таблицы ← Students; Комментарий к таблице ← Справочник студентов |

– задать поле идентификатора студента (счетчик, первичный ключ):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← stud_ID; Тип данных ← Integer; гр. Генерация значений | уст. Столбец идентификации: начальное значение ← 0; Приращение ← 1; кн. OK ►ф. Мастер по созданию столбцов |

вкл. 5. Ключи; кн. Добавить первичный ключ►ф. Определить первичный ключ; Имя первичного ключа ← PK_Students; Доступные столбцы | Выделить STUD_ID; кн. [>]; кн. OK ►ф. Мастер по созданию столбцов

– задать поле номера зачетной книжки (уникальное, 6 цифр):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← no_zk; Тип данных ← Varchar; Характеристики типа данных -- Длина ← 6; гр. Генерация значений | уст. Нет; снять Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

вкл. 5. Ключи; кн. Добавить ключ уникальности ►ф. Добавить ключ уникальности; Имя ключа уникальности ← Unique_no_zk; Доступные столбцы | Выделить NO_ZK; кн. [>]; кн. OK ►ф. Мастер по созданию столбцов

– задать поля фамилии, имени, отчества (строковые):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← fam; Тип данных ← Varchar; Характеристики типа данных -- Длина ← 20; гр. Генерация значений | уст. Нет; снять Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

аналогично – для имени (Im) и отчества (Ot);

– создать уникальный индекс FIO из полей fam, im, ot:

вкл. 5. Ключи; кн. Добавить ключ уникальности ►ф. Добавить ключ уникальности; Имя ключа уникальности ← Unique_fio; Доступные столбцы | Выделить FAM, IM, OT; кн. [>]; кн. OK ►ф. Мастер по созданию столбцов

– задать поле кода специальности (до 7 русских букв):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← spec; Тип данных ← Varchar; Характеристики типа данных -- Длина ← 7; гр. Генерация значений | уст. Значение по умолчанию ← 1; снять Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

вкл. 7. Ограничения; кн. Добавить…; ф. Добавить проверочное ограничение; ф. Имя проверочного ограничения ← Russian_spec; Условие проверки ← SPEC>='А' AND SPEC<='я';

– задать поле курса (одна цифра от 1 до 6):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← kurs; Тип данных ← Varchar; Характеристики типа данных -- Длина ← 1; гр. Генерация значений | уст. Нет; снять Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

вкл. 7. Ограничения; кн. Добавить…; ф. Добавить проверочное ограничение; ф. Имя проверочного ограничения ← kurs_from_1_to_6; Условие проверки ← KURS>='1' AND KURS<='6';

– задать поле номера группы (две цифры от 01 до 99):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← gr; Тип данных ← Varchar; Характеристики типа данных -- Длина ← 2; гр. Генерация значений | уст. Нет; снять Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

вкл. 7. Ограничения; кн. Добавить…; ф. Добавить проверочное ограничение; ф. Имя проверочного ограничения ← gr_from_01_to_99; Условие проверки ← GR>='01' AND GR<='99';

– задать поле даты рождения (необязательная дата):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← data_r; Тип данных ← Date; гр. Генерация значений | уст. Нет; уст. Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

– задать поле биографии (мемо, необязательное):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← biogr; Тип данных ← Long Varchar; гр. Генерация значений | уст. Нет; уст. Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

– задать поле фотографии (объект):

вкл. 2. Столбцы; кн. Добавить; ф. Добавить столбец; Имя столбца ← foto; Тип данных ← GRAPHIC; гр. Генерация значений | уст. Нет; уст. Допускаются пустые значения; кн. OK ►ф. Мастер по созданию столбцов

– сохранить таблицу:

ф. Мастер по созданию таблиц | кн. OK | Сообщение DB2 -- Команда выполнена успешно; кн. Закрыть.

4. В базе данных с помощью редактора команд запрограммировать структуру таблицы Subjects (справочник предметов):

– открыть редактор команд:

Пуск | Программы | IBM DB2 | DB2COPY1 (по умолчанию) |

Инструменты командной строки | Редактор команд ►

ф. Редактор команд 1 – DB2COPY1| вкл. Команды |

Назначение → Добавить ► ф. Задать назначение: Доступные назначения ← Edu; уст. Использовать неявные параметры регистрации; кн. OK

– ввести программный код создания новой базы данных Subjects:

ф. Команды | CREATE TABLE SUBJECTS (

– ввести программный код создания идентификатора предмета (счетчик):

PREDM_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE

– ввести программный код создания поля названия предмета (строковый, до 20 букв):

PREDM_NAME VARCHAR (20) NOT NULL ,

– ввести программный код создания поля цикла предмета (строковый, до 15 букв):

CYCL VARCHAR (15) NOT NULL ,

– ввести программный код создания поля объема предмета (числовой):

HRS INTEGER NOT NULL ,

– ввести программный код создания поля кафедры предмета (строковый, до 15 букв):

DEP VARCHAR (20) NOT NULL ,

– ввести программный код создания первичного ключа таблицы (поле prem_ID):

CONSTRAINT PK_SUBJECTS PRIMARY KEY ( PREDM_ID) ,

– ввести программный код создания ограничения таблицы (значение поля hrs лежит в пределах от 10 до 200):

CONSTRAINT HRS_FROM_10_TO_200 CHECK (hrs>9 and hrs<201) );

– запустить команды на выполнение:

Панель инструментов | кн. Запустить ►Сообщение «DB20000I Команда SQL выполнена успешно» на экране.

5. Любым из представленных способов создать структуру таблицы Успеваемость (успеваемость студентов по предметам) ­– Uspev с полями:

– Student (идентификатор студента (тип такой же, как в таблицеСтуденты, но не счетчик));

– Predmet(идентификатор предмета (тип такой же, как в таблицеПредметы, но не счетчик));

– Ocenka(оценка (символ));

– Data (дата (дата)).

– ввести составной первичный ключ (поля идентификаторов студента и предмета):

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Таблицы | выбр. Uspev | пр. кн. мыши Изменить…►

ф. Изменить таблицу – Uspev | вкл. Ключи | кн. Добавить первичный ключ ►

ф. Определить первичный ключ; Имя первичного ключа ← PK_Uspev; Доступные столбцы | Выделить STUDENT, PREDMET; кн. [>]; кн. OK ►ф. Изменить таблицу – Uspev

– для полей таблицы придумать ограничения на значения.

7. Связать таблицы, сделав таблицы студентов и предметов родительскими, а таблицу успеваемости – дочерней; установить правила ссылочной целостности: каскадное для удаления и строгое для изменения:

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Таблицы | выбр. Uspev | пр. кн. мыши Изменить…►

ф. Изменить таблицу – Uspev | вкл. Ключи | кн. Добавить внешний ключ… ►

ф. Добавить внешний ключ; Имя внешнего ключа ← FK_Uspev_Student;

гр. Родительская таблица или псевдоним | Имя ← Students | Доступные столбцы | Выделить STUDENT; кн. [>]; При удалении ← Cascade; При изменении ← Restrict; кн. OK ►ф. Изменить таблицу – Uspev | кн. OK ►ф. Центр управления – DB2COPY1

аналогичным образом установить связь между таблицами Subjects и Uspev.

8. Наполнить базу данных сведениями о студентах (не менее 5), предметах (не менее 3) и оценках (не менее 10). Освоить приемы изменения и удаления полей и записей. Проверить работоспособность ограничений значений полей, уникальности и др., предусмотренные при задании структуры базы данных. Проверить работоспособность ссылочной целостности, удаляя, изменяя и вставляя данные.

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Таблицы | выбр. Students | пр. кн. мыши; выбр. Открыть… ►

ф. Открыть таблицу – STUDENTS | кн. Добавить строку |

внести данные | кн. Принятие

Б. Производные таблицы, хранимые процедуры, триггеры

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

– создать производную таблицу Students_info:

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Производные таблицы | пр. кн. мыши; выбр. Создать… ►

ф. Создать производную таблицу | Имя производной таблицы ← Students_info;

Оператор SQL | Заменить текст

[(столбцы, ...)]

AS [WITH (общее_табличное_выражение, ...)]

SELECT <столбцы>

FROM <таблицы>

WHERE <критерии_поиска>

на код:

AS SELECT STUD_ID, NO_ZK,

CONCAT(CONCAT(CONCAT(FAM,' '),

CONCAT(SUBSTR(IM,1,1),'.')), CONCAT(SUBSTR(OT,1,1),'.')) as FIO,

CONCAT(CONCAT(CONCAT(SPEC,'-'),KURS),GR) as GRUPPA from Students

– проверить работоспособность производной таблицы:

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Производные таблицы | выбр. Students_info |

пр. кн. мыши; выбр. Открыть… ► результат на экране

2. Аналогичным образом создать представление для вывода сведений об успеваемости студентов из таблицы успеваемости с указанием сведений о студенте из запроса Students_info и сведений о предмете из таблицы предметов. Результат должен содержать следующие поля: ФИО студента, Группа, Предмет, Дата, Оценка. Назвать представление как Students_uspev.

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

– открыть редактор команд (см. пункт выше)

– ввести программный код создания хранимой процедуры GetStudentInfo:

CREATE PROCEDURE GetStudentInfo (IN IN_ZK VARCHAR(6))

RESULT SETS 1

LANGUAGE SQL

BEGIN

DECLARE x CURSOR WITH RETURN FOR

SELECT STUD_ID, NO_ZK,

CONCAT(CONCAT(CONCAT(FAM,' '),CONCAT(SUBSTR(IM,1,1),'.')),

CONCAT(SUBSTR(OT,1,1),'.')) as FIO,

CONCAT(CONCAT(CONCAT(SPEC,'-'),KURS),GR) as GRUPPA

FROM STUDENTS WHERE no_zk=IN_ZK; OPEN x;

END

– запустить команды на выполнение:

Панель инструментов | кн. Запустить ►Сообщение «DB20000I Команда SQL выполнена успешно» на экране.

– проверить работоспособность хранимой процедуры:

ф. Редактор команд | [Ctrl+N] ►новая форма Редактора команд; ввести код:

call GetStudentInfo ('Номер зачетной книжки')

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

– создать новый триггер CheckExams для таблицы успеваемости

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Триггеры | пр. кн. мыши; выбр. Создать… ►

ф. Создать триггер | Имя триггера ← CheckExams; Момент действия триггера ← До; Операция, вызывающая действие триггера ← Вставка;

вкл. Действие триггера; Внутриоператорное имя для новых строк ← New;

Действие триггера ← заменить текст:

WHEN ( критерий-поиска )

BEGIN ATOMIC

оператор-SQL-триггера ;

END

на программный код:

BEGINATOMIC

declare stud INTEGER;

declare dt DATE;

declare count INTEGER;

set stud = NEW.STUDENT;

set dt = NEW.DAT;

set count = (SELECT count(*) FROM Uspev WHERE Student=stud and Dat=dt);

ifcount> 1thenSIGNALSQLSTATE'70001' (' Студент может сдавать не более двух предметов в день ');

endif;

END

– проверить работоспособность триггера:

ф. Центр управления – DB2COPY1 | раскр. Центр управления → Все базы данных → Edu → Таблицы | выбр. Uspev | пр. кн. мыши; выбр. Открыть… ►

ф. Открыть таблицу – USPEV | кн. Добавить строку |

ввести вторую запись по студенту, сдающему второй предмет в один и тот же день; |

кн. Принятие ►сообщение об ошибке с текстом из триггера.

В. DB2 и Java

1. Запустить среду разработки Eclipse:

Локальный диск D|Eclipse| запустить файлEclipse.exe►ф.JavaEclipse-SDK

2. Создать новый проект Java:

ф. Java Eclipse – SDK | File → New → Java Project ►

ф. New Java Project | Project Name ← Lab_Группа

3. Добавить драйверы JDBC для работы с базами данных DB2:

ф. Package Explorer | раскр. Lab_Группа; пр. кн. мыши Build Path → Add External Archives… ► ф. Jar Selection | выбр. все файлы .jar и .zip из директории IBM/IBM DATA SERVER DRIVER/Java на локальном диске D; кн. OK► ф.JavaEclipse–SDK.

4. Создать новый класс:

ф. Package Explorer | пр. кн. мыши на Lab_Группа; New → Class ►ф. New Java Class; Name ← DbClass; уст. public static void main (String[] args); кн. Finish►ф.DbClassJava

5. Подключить библиотеку sql для работы с базами данных:

ф. DbClassJava| курсор на первой строке; вписать строку: «import java.sql.*;»

6. Загрузить драйвер JDBC:

ф. DbClassJava| курсор после строки с текстом

public static void main(String[] args) {

// TODO Auto-generated method stub

вписать программный код:

try {

Class.forName("com.ibm.db2.jcc.DB2Driver");

System.out.print("Класс найден");

System.out.println("\n");

}

catch (ClassNotFoundException e) {

System.out.print("Класс не найден");

}

7. Проверить работоспособность класса нажатием на клавишу [F11].

8. Установить соединение с базой данных:

ф. DbClass Java | курсор после строк

System.out.print("Класс найден");

System.out.println("\n");

}

вписать программный код:

String url = "jdbc:db2:Edu";

String user = "";

String password = "";

try{

Connection dbConnection=DriverManager.getConnection(url,user,password);

System.out.print("Соединение установлено");

System.out.println("\n");

}

catch( SQLException x ){

System.out.println("Соединение не установлено");

}

9. Проверить работоспособность класса нажатием на клавишу [F11].

10. Выполнить запрос к представлению Students_info базы данных Edu:

ф. DbClass Java | курсор после строк

System.out.print("Соединение установлено");

System.out.println("\n");

}

вписать программный код:

Statement statement = dbConnection.createStatement();

ResultSet results =

statement.executeQuery("SELECT * FROM STUDENTS_INFO ");

11. Проверить работоспособность класса нажатием на клавишу [F11].

12. Показать результаты запроса:

ф. DbClass Java | курсор после строк

ResultSet results =

statement.executeQuery("SELECT * FROM STUDENTS_INFO ");

вписать программный код:

while(results.next()){

System.out.print("\n"+results.getString("STUD_ID"));

System.out.print(" "+results.getString("NO_ZK"));

System.out.print(" "+results.getString("FIO"));

System.out.print(" "+results.getString("GRUPPA"));

}

statement.close();

13. Проверить работоспособность класса нажатием на клавишу [F11].

14. Сохранить проект.

Соседние файлы в папке BDlab