Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_24 Головков И.Е. 12001208.docx
Скачиваний:
0
Добавлен:
26.06.2024
Размер:
122.48 Кб
Скачать

ФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное УЧРЕЖДЕНИЕ ВЫСШЕГО образования

«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ

ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

(НИУ «БелГУ»)

ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

Кафедра прикладной информатики и информационных технологий

Отчет по лабораторной работе № 24

Тема работы «Построение SQL запросов к базе данных в разрабатываемой информационной системе»

по дисциплине «Управление данными»

студента очного отделения

2 курса 12002108 группы

Головкова Игоря Евгеньевича

Проверил:

Ассистент кафедры прикладной информатики и информационных технологий Сухарев М. А.

БЕЛГОРОД, 2023

Цель работы

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

2.   Изучить компоненты среды разработки ИС, предназначенные для построения SQL запросов к таблицам базы данных.

3.   Изучить способы построения приложений в среде разработки ИС на основе изменения параметров SQL команды.

4.   Изучить способы построения приложений в среде разработки ИС на основе передачи параметров SQL команды.

5.   Изучить способы построения приложений в среде разработки ИС при выполнении команд DML-языка SQL.

6.   Научиться создавать приложения в среде разработки ИС на основе построения SQL запросов к таблицам базы данных.

Рисунок 1– Логическая модель БД

Рисунок 2 – Физическая модель БД

Ход работы:

  1. Листинг класса CustomController

  2. package com.course.courseud; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.TableView; import javafx.scene.control.TextField; public class CustomController { @FXML private Button refreshButton; @FXML private Button infoButton; @FXML private TableView<ObservableList<String>> customQueryTable; @FXML private TextField customQueryTextField; @FXML private Button goToSelectsButton; @FXML private ComboBox<String> tablesComboBox; UtilsController utilsController = new UtilsController(); @FXML public void initialize() { String instruction = """ Эта панель предназначена для ручного ввода SQL-запросов в поле для ввода. Запрос вводится полностью, для выполнения запроса нужно нажать Enter после ввода его в поле. """; tablesComboBox.getItems().addAll(utilsController.getTablesNames()); tablesComboBox.getItems().addAll(utilsController.getViewsNames()); goToSelectsButton.setOnAction(actionEvent -> utilsController.openNewWindow(goToSelectsButton, "table_selects.fxml")); infoButton.setOnAction(actionEvent -> utilsController.showInstructionWindow(instruction)); } @FXML private void makeTableView() { customQueryTable.getColumns().clear(); String sqlQuery = "SELECT * FROM " + tablesComboBox.getValue(); utilsController.fillTableWithSqlQuery(customQueryTable, sqlQuery); } @FXML private void makeCustomQuery() { customQueryTable.getColumns().clear(); String sqlQuery = customQueryTextField.getText(); if (sqlQuery.contains("SELECT")) { utilsController.fillTableWithSqlQuery(customQueryTable, sqlQuery); } else { utilsController.updateTableWithSqlQuery(sqlQuery); } } }

  1. Листинг класса DeletesController

package com.course.courseud; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.*; public class DeletesController { @FXML private Button goToMenuButton; @FXML private Button refreshButton; @FXML private Button deleteButton; @FXML private Button customQueryButton; @FXML private Button infoButton; @FXML private ComboBox<String> tablesComboBox; @FXML private TableView<ObservableList<String>> deletesTable; @FXML private TextField whereTextField; @FXML private ComboBox<String> orderByComboBox; @FXML private CheckBox ascCheckBox; UtilsController utilsController = new UtilsController(); @FXML public void initialize() { String instr = """ 1) Кнопка "<" - возвращает в главное меню. 2) Кнопка с изображением закрученных стрелок - обновляет и показывает выбранную таблицу. 3) Кнопка "i" (эта кнопка) - выводит окно справки. 4) Кнопка с изображением головы и шестерни - открывает окно для написания непосредественно SQL-запросов в приложении разработчиком. 5) Поле с выпадающим списком и подсказкой "Выбрать из доступных таблиц..." - открывает для выбора список всех таблиц базы данных. 6) Поле ввода условий и подсказкой "Условие для выборки..." - позволяет записывать условия для выборки из выбранной таблицы. Значения нужно записывать в форматах: а) "столбец = значение" для поиска нужного, б) "столбец >/< значение" для фильтрации/ Условия разделять словами "AND","OR", "и", "или", либо заятой (что равно "и"). 7) Поле с выпадающим списком и подсказкой "Сортировать по колонке..." - открывает для выбора список всех столбцов выбранной таблицы. 8) Флажок "По возрастанию" сортирует таблицу по выбранному столбцу по возрастанию, либо по убыванию, если флажок снят. 9) Кнопка с подписью "Удалить" удаляет из таблицы выбранную строку Стандартный алгоритм: 1. Выбрать таблицу в поле с выпадающим списком 2. Ввести условие для выборки (Опционально) 2.1. Нажать Enter, не выходя из поля ввода 3. Выбрать столбец для сортировки в слующем поле с выпадающим списком (Опционально) 4. Оставить или снять флажок "По возрастанию" (Опционально) 5. Выбрать строку для удаления 6. Нажать кнопку "Удалить" """; infoButton.setOnAction(actionEvent -> utilsController.showInstructionWindow(instr)); customQueryButton.setOnAction(actionEvent -> utilsController.openNewWindow(customQueryButton, "custom_query.fxml")); goToMenuButton.setOnAction(actionEvent -> utilsController.openNewWindow(goToMenuButton, "menu.fxml")); tablesComboBox.setOnAction(actionEvent -> { orderByComboBox.setOnAction(null); orderByComboBox.setValue(""); makeTableView(); fillOrderByComboBox(); orderByComboBox.setOnAction(actionEvent1 -> makeTableView()); }); whereTextField.setOnAction(actionEvent -> { orderByComboBox.setOnAction(null); orderByComboBox.setValue(""); makeTableView(); fillOrderByComboBox(); orderByComboBox.setOnAction(actionEvent1 -> makeTableView()); }); fillTablesComboBox(); } private void fillTablesComboBox() { tablesComboBox.getItems().addAll(utilsController.getTablesNames()); } private void fillOrderByComboBox() { ObservableList<String> columns = FXCollections.observableArrayList(); for (TableColumn<ObservableList<String>, ?> tc : deletesTable.getColumns()) { columns.add(tc.getText()); } orderByComboBox.setItems(columns); } @FXML private void makeTableView() { deletesTable.getColumns().clear(); String sqlQuery = "SELECT * FROM " + tablesComboBox.getValue(); sqlQuery = utilsController.appendWhereAndOrderByToQuery(whereTextField, orderByComboBox, ascCheckBox, sqlQuery); utilsController.fillTableWithSqlQuery(deletesTable, sqlQuery); } @FXML private void deleteRow() { String sqlQuery = "DELETE FROM " + tablesComboBox.getValue() + " WHERE " + deletesTable.getColumns().get(0).getText() + " = " + deletesTable.getSelectionModel().getSelectedItem().get(0); utilsController.updateTableWithSqlQuery(sqlQuery); makeTableView(); } }