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. Сохранить проект.
