Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб_21 Головков И.Е. 12002108

.docx
Скачиваний:
0
Добавлен:
26.06.2024
Размер:
937.78 Кб
Скачать

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

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

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

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

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

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

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

Тема работы «Визуальное представление набора данных БД в разрабатываемой информационной системе»

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

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

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

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

Проверил:

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

БЕЛГОРОД, 2023

Цель работы

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

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

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

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

5.   Научиться создавать приложения с компонентами среды разработки, отображающими таблицы баз данных, а также позволяющими редактировать эти таблицы.

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

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

Ход работы:

Рисунок 3 – Главное меню

Рисунок 4 – Окно добавления данных

Рисунок 5 – Добавление данных

Рисунок 6 – Окно просмотра данных

Рисунок 7 – Просмотр данных

Рисунок 8 – Окно изменения данных

Рисунок 9 – Изменение данных

Рисунок 10 – Окно удаления данных

Рисунок 11 – Удаление данных

Рисунок 12 – Данные после удаления

Вывод: была изучена технология доступа к данным в среде разработки информационных систем; изучены компоненты среды, предназначенные для отображения и хранения таблиц; изучены компоненты среды, предназначенные для отображения и изменения отдельных полей таблиц; изучены компоненты среды, позволяющие переводить таблицу в режимы вставки записи, редактирования, удаления, добавления записи соответственно; научился создавать приложения с компонентами среды разработки, отображающими таблицы баз данных, а также позволяющими редактировать эти таблицы.

Листинг кода для добавления данных:

@FXML private void insertRow() { StringBuilder sqlQuery = new StringBuilder("INSERT INTO " + tablesComboBox.getValue() + "("); for (TableColumn<ObservableList<String>, ?> tc : insertsTable.getColumns()) { sqlQuery.append(tc.getText()) .append(", "); } sqlQuery.deleteCharAt(sqlQuery.length() - 2) .append(") VALUES ("); String[] values = insertsTextField.getText().split(","); StringBuilder stringBuilderValues = new StringBuilder(); for (String value : values) { value = value.trim(); if (!value.matches("\\d+")) { value = "'" + value + "'"; } stringBuilderValues.append(value) .append(", "); } stringBuilderValues.deleteCharAt(stringBuilderValues.length() - 2); sqlQuery.append(stringBuilderValues) .append(");"); utilsController.updateTableWithSqlQuery(String.valueOf(sqlQuery)); makeTableView(); }

Листинг кода для просмотра данных:

tablesComboBox.setOnAction(actionEvent -> { orderByComboBox.setOnAction(null); orderByComboBox.setValue(""); makeTableView(); fillOrderByComboBox(); orderByComboBox.setOnAction(actionEvent1 -> makeTableView()); });

private void makeTableView() { selectsTable.getColumns().clear(); String sqlQuery = "SELECT * FROM " + tablesComboBox.getValue(); sqlQuery = utilsController.appendWhereAndOrderByToQuery(whereTextField, orderByComboBox, ascCheckBox, sqlQuery); utilsController.fillTableWithSqlQuery(selectsTable, sqlQuery); }

public String appendWhereAndOrderByToQuery (TextField whereTextField, ComboBox orderByComboBox, CheckBox ascCheckBox, String sqlQuery) { // Добавляем WHERE, если есть if (!whereTextField.getText().isEmpty()) { String whereCondition = whereTextField.getText().trim(); // Упрощение синтаксиса при вводе whereCondition = whereCondition.replaceAll(",", " AND "); whereCondition = whereCondition.replaceAll(" и ", " AND "); whereCondition = whereCondition.replaceAll(" или ", " OR "); // Поиск даты Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}"); Matcher matcher = pattern.matcher(whereCondition); while (matcher.find()) { String date = matcher.group(); whereCondition = whereCondition.replace(date, "'" + date + "'"); } // Поиск строковых значений столбцов pattern = Pattern.compile("(?<==\\s)[\\p{L}\\p{Zs}]+(?=\\s(OR|AND|$)|$)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); matcher = pattern.matcher(whereCondition); whereCondition = matcher.replaceAll("'$0'"); sqlQuery += " WHERE " + whereCondition; } // Добавляем ORDER BY, если есть if (orderByComboBox.getValue() != null && !orderByComboBox.getValue().equals("")) { sqlQuery += " ORDER BY " + orderByComboBox.getValue(); if (!ascCheckBox.isSelected()) { sqlQuery += " DESC "; } else { sqlQuery += " ASC "; } } return sqlQuery; }

Листинг кода для изменения данных:

@FXML private void updateRow() { String sqlQuery = "UPDATE " + tablesComboBox.getValue() + " SET "; String[] oldValues = updatesTextField.getText().split(","); StringBuilder stringBuilderValues = new StringBuilder(); // Разделяем полученные значения for (int i = 0; i < oldValues.length; i++) { oldValues[i] = oldValues[i].trim(); if (!oldValues[i].matches("\\d+")) { oldValues[i] = "'" + oldValues[i] + "'"; } } for (int i = 0; i < updatesTable.getColumns().size(); i++) { stringBuilderValues .append(updatesTable.getColumns().get(i).getText()) .append(" = ") .append(oldValues[i]) .append(", "); } // Добавляем WHERE для удаления одного поля stringBuilderValues .deleteCharAt(stringBuilderValues.length() - 2) .append(" WHERE ") .append(updatesTable.getColumns().get(0).getText()) .append(" = ") .append(updatesTable.getSelectionModel().getSelectedItem().get(0)) .append(";"); sqlQuery += stringBuilderValues; utilsController.updateTableWithSqlQuery((sqlQuery)); makeTableView(); }

Листинг кода для удаления данных:

@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(); }

public void updateTableWithSqlQuery(String sqlQuery) { try { // Делаем запрос и получаем метаданные Statement statement = connection.createStatement(); statement.executeUpdate(sqlQuery); } catch (SQLException e) { e.printStackTrace(); showSqlExceptionWindow(e); } }