Лабораторная работа по java
Лабораторная работа № 1
Знакомство с JDBC
Импортируйте проект HSQLDemo из каталога Examples
Проект представляет собой простейшее приложение с консольным интерфейсом для работы с базой данных сотрудников. Используется СУБД HyperSQL в режиме «in memoty, таблица Persons следующей структуры:
Поле |
Тип |
Назначение |
Id |
Integer, auto-increment |
Идентификатор (ПК) |
name |
Varchar(30) |
Имя |
lastname |
Varchar(30) |
Фамилия |
age |
Integer |
Возраст |
payment |
Integer |
Зар. плата |
HyperSQL (также используются наименования HSQLDB, Hypersonic SQL, http://hsqldb. org) – небольшая СУБД с открытыми исходными текстами, написанная полностью на Java и, благодаря этому, легко интернирующаяся в Java-приложения. Часто используется на этапах разработки и тестирования приложений из-за высокой скорости и легковесности. Для подключения СУБД к приложению достаточно одной библиотеки hsqldb. jar. Поддерживается три режима работы:
— стандартный режим «клиент-сервер». Сервер запускается посредством исполняемого файла binrunServer. bat, приложение должно подключаться к серверу в качестве клиента. Для использования этого режима строка подключения должна выглядеть следующим образом:
jdbc:hsqldb:hsql://сервер/имя_бд, например: jdbc:hsqldb:hsql://localhost/persons
— режим «файл-сервер». Для работы в этом режиме сервер не требуется, база данных хранится в каталоге на диске. БД и система управления ней могут переноситься вместе с приложением. Используется следующая строка подключения:
jdbc:hsqldb:file:имя_бд, например: jdbc:hsqldb:file:db/persons (БД persons будет создана в подкаталоге db каталога проекта)
— режим «in memory» (в памяти). В этом режиме БД находится только в оперативной памяти во время работы приложения, т. е. создается при запуске приложения и уничтожается при его завершении. Данные между запусками не сохраняются. В таком режиме обеспечивается наивысшая скорость работы, поэтому данный режим используется при тестировании приложений. Используется следующая строка подключения:
jdbc:hsqldb:mem:имя_бд, например: jdbc:hsqldb:mem:persons
Для управления БД (просмотр данных, создание таблиц, ввод и обновление данных) можно использовать средства платформы Eclipse либо встроенные средства HyperSQL. В каталоге bin находятся исполняемые файлы runManager. bat и runManagerSwing. bat, позволяющие запустить один из вариантов приложения для управления БД.
В проекте реализованы основные CRUD (Create, Read, Update, Delete) операции с базой данных. Найдите методы, выполняющие каждую из этих операций, изучите их принцип работы.
Для удобства база данных при запуске создается (метод createTables()) и наполняется начальными данными (метод initData()). Найдите эти методы и изучите их принцип работы.
Хотя приложение работоспособно, оно обладает существенным недостатком: в одном классе смешан код представления (интерфейса пользователя) и доступа к данным. Это существенно затрудняет совместную разработку и последующую поддержку приложения.
Устраним этот недостаток, разделив классы, работающие с базой данных, и реализующие пользовательский интерфейс. Определите, какие методы должны относиться к какому классу, попробуйте начать разделение (рекомендуется создать отдельный класс для работы с БД, а в классе DataProgram оставить пользовательский интерфейс)
Импортируйте проект HSQLDemo2, в котором реализовано разделение функционала по двум классам, сравните ваше решение с предложенным.
Изучите устройство класса DataManager, обратите внимание на то, есть ли отличия от аналогичных методов предыдущего примера.
Данный проект, несмотря на улучшения, все еще обладает определенными недостатками:
— класс интерфейса пользователя (DataGui) все еще тесно связан с классом DataManager, а также к конкретной технологии доступа к данным (в частности, обратите внимание, что он работает с классом ResultSet из пакета JDBC)
— приложение не является объектно-ориентированным: работа осуществляется с табличными данными, а не объектными структурами; предметная область нормально не представлена, т. е. бизнес-логику выделить не удастся
Для устранения этих недостатков предлагается следующее:
— Введем класс Person, представляющий собой доменную модель приложения (класс предметной области, бизнес-логику)
— абстрагируем класс пользовательского интерфейса: он должен осуществлять работу только с объектами предметной области, ничего не зная об их табличном происхождении. Для этого в интерфейсе пользователя все операции должны происходить над объектами класса Person и коллекциями данных объектов. Таким образом, класс DataManager должен скрывать всю работу с таблицами, оперируя вовне объектами класса Person. Т. е. например метод извлечения всех записей из таблицы должен возвращать список объектов класса Person, метод добавления записи принимать параметром объект класса Person, подлежащий сохранению и т. д.
В результате должны получиться независимый от технологии доступа к данным класс интерфейса пользователя, и независимый от интерфейса класс доступа к данным.
Попробуйте выполнить данное разделение. Импортируйте проект HSQLDemo3 и сравните ваш результат с предложенным. Внимательно изучите код классов проекта HSQLDemo3, выявите недостатки и дайте рекомендации по их устранению.
Задание на лабораторную работу
1. Реализуйте класс Учебный курс (Course) со следующими полями:
· название (например, Технологии Java)
· год изучения (например, 1)
· трудоемкость (credits) (например, 6)
Реализуйте класс Образовательная программа (StudyProgram) со следующими полями:
· название (например, Управление данными)
· код направления подготовки (например, 090402)
· название направления подготовки (например, Информационные системы и технологии)
· уровень образования (например, Магистратура)
Образовательная программа должна включать в себя список учебных курсов, каждый учебный курс может входить только в одну образовательную программу. Организуйте необходимые связи между классами.
2. Создайте в базе данных таблицы Course и StudyProgram с полями, соответствующими ранее созданным классам, для хранения информации об образовательных программах и курсах. Реализуйте класс DataManager, инкапсулирующий операции работы с таблицами БД и обеспечивающий вышестоящему уровню работу с объектами классов Course и StudyProgram. Реализуйте минимум следующие операции (методы):
· поиск курса по id
· получение списка всех учебных курсов, упорядоченных по названию
· получение списка всех учебных курсов, упорядоченных по году изучения
· получение списка всех учебных курсов, составляющих определенную образовательную программу
· получение списка всех образовательных программ
· получение списка всех образовательных программ заданного уровня подготовки
· поиск образовательных программ по коду направления подготовки
· создание образовательной программы
· создание учебного курса
· редактирование образовательной программы
· редактирование учебного курса
· удаление образовательной программы
· удаление учебного курса
3. Реализуйте приложение, демонстрирующее работу созданных классов