Это старая версия Информатика/Архив/2020/10Б за 10.02.2020 14:08:17.

10 Б

Курс по Java

Реляционные базы данных. Язык SQL


Для работы (обучения) удобно использовать SQLite. Почему?
0. Soft
Удобно работать при помощи SQLite Browser. Установите его.
1. Создание таблиц
Какие типы данных есть в SQLitе? (ДО п. 2)
Изучите синтаксис SQL для создания и удаления таблиц


Создайте базу данных из след. таблиц (какие поля можно и нужно сделать ключевыми?)


STUDENT : ID, SURNAME, NAME, STIPEND, KURS, CITY, BIRTHDAY, UNIV_ID
LECTURER : ID, SURNAME, NAME, CITY, UNIV_ID
SUBJECT : ID, NAME, HOUR, SEMESTER
UNIVERSITY : ID, UNIV_NAME, RAITING, CITY
EXAM_MARKS : EXAM_ID, STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE
SUBJ_LECT : LECTURER_ID, SUBJECT_ID


2. Наполнение данными
Изучите синтаксис команды INSERT.


В каждой таблице должно быть не менее 100 записей.
Для того, чтобы сделать это быстро, стоит использовать скрипты – программы, генерирующие команды INSERT


3. Запросы а выборку из одной таблицы
Простейшие варианты
Условие WHERE
Дополнительные возможности SELECT
Вычисляемые поля


Задачи на простой SELECT


Совсем просто


1. Напишите запрос для вывода идентификатора (номера) предмета
обучения, его наименования, семестра, в котором он читается,
и количества отводимых на этот предмет часов для всех строк таблицы SUBJECT.


2. Напишите запрос, выбирающий все данные из таблицы STUDENT,
расположив столбцы таблицы в следующем порядке: KURS, SURNAME, NAME, STIPEND.


3. Напишите запрос, позволяющий получить из таблицы EXAM_MARKS
значения столбца MARK (экзаменационная оценка) для всех студентов, исключив из списка повторение одинаковых строк.


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


5. Напишите запрос, который выполняет вывод списка университетов, рейтинг которых превышает 300 баллов.


6. Напишите запрос на вывод находящихся в таблице EXAM_MARKS
номеров предметов обучения, экзамены по которым сдавались между 10 и 20 января 1999 года.


7. Напишите запрос на вывод названий предметов обучения, начинающихся на букву «И».


8. Напишите запрос для выбора из таблицы EXAM_MARKS записей,
в которых отсутствуют значения оценок (поле MARK).


Связанные подзапросы

1. Напишите запрос с подзапросом для получения данных обо всех оценках студента с фамилией «Иванов». Предположим, что его персональный номер неизвестен. Всегда ли такой запрос будет корректным?
2. Напишите запрос, выбирающий данные об именах всех студентов,
имеющих по предмету с идентификатором 101 балл выше общего среднего балла.
3. Напишите запрос, который выполняет выборку имен всех студентов, имеющих по предмету с идентификатором 102 балл ниже общего среднего балла
4. Напишите запрос, выполняющий вывод количества предметов, по которым экзаменовался каждый студент, сдававший более 20 предметов.
5. Напишите команду SELECT, использующую связанные подзапросы и выполняющую вывод имен и идентификаторов студентов, у которых стипендия совпадает с максимальным значением стипендии для города, в котором живет студент.
6. Напишите запрос, который позволяет вывести имена и идентификаторы всех студентов, для которых точно известно, что они проживают в городе, где нет ни одного университета.
7. Напишите два запроса, которые позволяют вывести имена и идентификаторы всех студентов, для которых точно известно, что он проживают не в том городе, где расположен их университет.
8. Напишите запрос, позволяющий вывести данные обо
всех студентах, обучающихся в вузах, которые имеют рейтинг выше 300
9. Напишите запрос, выбирающий сведения обо всех студентах, для которых в том же городе, где живет студент, существуют университеты, в которых он не учится.
10. Напишите запрос, выбирающий из таблицы SUBJECT данные о названиях предметов обучения, экзамены по которым сданы более чем
одним студентом.

JDBC

Подключение драйвера, начало работы
Драйвер JDBC


Таблица в swing


Узнать количество и название столбцов


ResultSet rs = stmt.executeQuery("SELECT ...");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();


// The column count starts from 1
for (int i = 1; i <= columnCount; i++ ) {

String name = rsmd.getColumnName(i);
// Do stuff with name

}


Написать GUI-программу c полем ввода и кнопкой
Пишем в поле ввода запрос SELECT, при нажатии на кнопку – результат отображается в таблице.