
Лаб_21 Головков И.Е. 12002108
.docxФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное УЧРЕЖДЕНИЕ ВЫСШЕГО образования
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
Кафедра прикладной информатики и информационных технологий
Отчет по лабораторной работе № 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); } }