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

Лаб_7 Головков И.Е. 12002108 КСМП

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

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ БЕЛОГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ (НИУ «БелГУ») ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

КАФЕДРА ИНФОРМАЦИОННЫХ И РОБОТОТЕХНИЧЕСКИХ СИСТЕМ

Отчет по лабораторной работе №7 Тема работы «Разработка приложений баз данных на языке Java» по дисциплине «Концепция создания модульных приложений»

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

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

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

Проверил:

ст. пр. Гончаров Дмитрий Викторович

Белгород 2023

Общая постановка задачи

1. В соответствии с индивидуальным вариантом задания требуется:

определить набор таблиц и представлений базы данных, необходимых

прикладной программе;

• определить порядок взаимодействия прикладной программы с

базой данных;

• разработать запросы к базе данных на языке SQL;

• разработать структуры данных для представления запрашиваемых

данных в памяти;

• реализовать прикладную программу на языке программирования Java.

2. Оформить отчет по лабораторной работе, включающий:

• титульный лист;

• цель работы;

• постановку задачи для Вашего варианта;

• схему базы данных или той ее части, которая используется

прикладной программой;

• текст запросов на языке SQL;

• текст программы на языке Java;

• тесты и описание процедуры тестирования;

• скриншоты результатов выполнения тестовых примеров;

• ответы на контрольные вопросы.

Тема «Справочник комнатных растений» (Ботанический сад)

Демонстрация работы программы:

Рисунок 1 – Справочная информация по названиям всех таблиц

Рисунок 2 – Вывод всех столбцов таблицы

Рисунок 3 – Обработка неверного ввода

Рисунок 4 – Сортировка по столбцу id

Рисунок 5 – Группировка по именам

Рисунок 6 – Фильтр по условию

Рисунки 7, 8 – Вывод таблиц «plant_health» и «physical_parameters»

Листинг

// Класс для запуска программы с точкой входа

package lab.ud; import java.sql.*; import java.util.*; public class LabUD { static final String DB_URL = "jdbc:postgresql://localhost:5432/labsud"; static final String DB_USER = "postgres"; static final String DB_PASSWORD = "3gor"; public static void main(String[] args) { try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) { MenuCommands menuCommands = new MenuCommands(connection); menuCommands.outputInvitation(); while (true) { menuCommands.outputMenuCommands(); } } catch (SQLException e) { throw new RuntimeException(e); } } }

// Интерфейс для SQL-команд

package lab.ud; public interface SqlCmdInterface { void outputAllData(String tableName); void outputOrderBy(String tableName, String columnName); void outputGroupBy(String tableName, String groupingColumnName, String associatedColumnsName); void outputWhere(String tableName, String conditions); void outputAllTablesNames(); }

// Класс для SQL-команд

package lab.ud; import java.sql.*; public class SqlCommands implements SqlCmdInterface { Connection connection; public SqlCommands(Connection connection) { this.connection = connection; } @Override public void outputAllData(String tableName) { try { String sqlQuery = "SELECT * FROM " + tableName; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sqlQuery); ResultSetMetaData metaData = getMetaDataOutputAllData(resultSet); } catch (SQLException e) { System.err.println(e.getMessage()); System.err.flush(); System.err.println("Введите заново"); } } @Override public void outputOrderBy(String tableName, String columnName) { try { String sqlQuery = "SELECT * FROM " + tableName + " ORDER BY " + columnName; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sqlQuery); ResultSetMetaData metaData = getMetaDataOutputAllData(resultSet); } catch (SQLException e) { System.err.println(e.getMessage()); System.err.flush(); System.err.println("Введите заново"); } } @Override public void outputGroupBy(String tableName, String groupingColumnName, String associatedColumnsName) { try { String sqlQuery = "SELECT " + groupingColumnName + ", " + associatedColumnsName + " FROM " + tableName + " GROUP BY " + groupingColumnName; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sqlQuery); ResultSetMetaData metaData = getMetaDataOutputAllData(resultSet); System.out.println("—".repeat(metaData.getColumnCount() * 32)); } catch (SQLException e) { System.err.println(e.getMessage()); System.err.flush(); System.err.println("Введите заново"); } } @Override public void outputWhere(String tableName, String conditions) { try { String sqlQuery = "SELECT * FROM " + tableName + " WHERE " + conditions; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sqlQuery); ResultSetMetaData metaData = getMetaDataOutputAllData(resultSet); } catch (SQLException e) { System.err.println(e.getMessage()); System.err.flush(); System.err.println("Введите заново"); } } @Override public void outputAllTablesNames() { try { DatabaseMetaData dbMetaData = connection.getMetaData(); ResultSet rsMetaData = dbMetaData.getTables(null, null, null, new String[]{"TABLE"}); while (rsMetaData.next()) { System.out.print(rsMetaData.getString("TABLE_NAME") + "; "); } System.out.println(); } catch (SQLException e) { System.err.println(e.getMessage()); System.err.flush(); System.err.println("Введите заново"); } } public ResultSetMetaData getMetaDataOutputAllData(ResultSet resultSet) { ResultSetMetaData metaData = null; try { // Получаем количество и названия столбцов с помощью getMetaData, выводим их metaData = resultSet.getMetaData(); System.out.println('\n' + "—".repeat(metaData.getColumnCount() * 32)); for (int i = 1; i <= metaData.getColumnCount(); i++) { System.out.printf(" %-30s|", metaData.getColumnName(i)); } // Выводим все полученные в resultSet столбцы System.out.println('\n' + "—".repeat(metaData.getColumnCount() * 32)); while (resultSet.next()) { for (int i = 1; i <= metaData.getColumnCount(); i++) { System.out.printf(" %-30s|", resultSet.getString(i)); } System.out.println(); } System.out.println("—".repeat(metaData.getColumnCount() * 32)); } catch (SQLException e) { System.err.println(e.getMessage()); System.err.flush(); System.err.println("Введите заново"); } return metaData; } }

package lab.ud; import java.sql.Connection; import java.util.*; public class MenuCommands { Connection connection; public MenuCommands(Connection connection) { this.connection = connection; } public void outputInvitation() { System.out.println(""" Программа Игоря Головкова для ботанического сада """); } public void outputMenuCommands() { System.out.println( """ Меню команд: 1. Вывести названия всех таблиц БД 2. Вывести все данные таблицы 3. Вывести отсортированные данные всей таблицы 4. Вывести данные таблицы с группировкой по столбцу 5. Вывести данные таблицы с фильтром по значению столбца 0. Завершить работу"""); inputMenuCommand(); } public void inputMenuCommand() { Scanner read = new Scanner(System.in); int choice = Integer.MAX_VALUE; try { choice = read.nextInt(); } catch (InputMismatchException ex) { } SqlCommands sqlCommands = new SqlCommands(connection); switch (choice) { case 1 -> { System.out.println("Названия всех таблиц:"); sqlCommands.outputAllTablesNames(); } case 2 -> { System.out.println("Введите название нужной таблицы: "); read.skip("((?<!\\R)\\s)*"); String tableName = read.nextLine(); sqlCommands.outputAllData(tableName); } case 3 -> { System.out.println("Введите название нужной таблицы: "); read.skip("((?<!\\R)\\s)*"); String tableName = read.nextLine(); System.out.println("Введите название столбца для сортировки: "); read.skip("((?<!\\R)\\s)*"); String columnName = read.nextLine(); sqlCommands.outputOrderBy(tableName, columnName); } case 4 -> { System.out.println("Введите название нужной таблицы: "); read.skip("((?<!\\R)\\s)*"); String tableName = read.nextLine(); System.out.println("Введите название столбца для группировки: "); read.skip("((?<!\\R)\\s)*"); String groupingColumnName = read.nextLine(); System.out.println("Введите название связанного столбца для сопоставления (через запятую, если > 1): "); read.skip("((?<!\\R)\\s)*"); String associatedColumnsName = read.nextLine(); sqlCommands.outputGroupBy(tableName, groupingColumnName, associatedColumnsName); } case 5 -> { System.out.println("Введите название нужной таблицы: "); read.skip("((?<!\\R)\\s)*"); String tableName = read.nextLine(); System.out.println("Введите условие фильтра (через AND/OR, если > 1): "); read.skip("((?<!\\R)\\s)*"); String conditions = read.nextLine(); sqlCommands.outputWhere(tableName, conditions); } case 0 -> System.exit(0); default -> { System.err.println("Ошибка: Введена неверная команда, введите заново в соответствии с номером в меню"); System.err.flush(); } } } }