Ім'я файлу: Курсова робота (Кравчук А.В_ІПЗм-12).docx Розширення: docx Розмір: 427кб. Дата: 25.03.2021 скачати Міністерство освіти і науки України Тернопільський національний економічний університет Факультет комп’ютерних інформаційних технологій Кафедра комп’ютерних наук Курсова робота з дисципліни «Методи та засоби реінженерії програмного забезпечення» на тему: «Редокументація програмних засобів для модуля управління даними електронного каталогу бібліотеки» Студентка групи ІПЗм-12 Кравчук Андрій Васильович (ПІБ) Керівник роботи Гончар Людмила Іванівна (ПІБ) Тернопіль – 2020 ЗМІСТ ВСТУП 3 РОЗДІЛ 1 ВИЗНАЧЕННЯ СИСТЕМНИХ АРХІТЕКТУР 5 Архітектури програмної системи 5 Структура бази даних 8 РОЗДІЛ 2 ПОБУДОВА ФУНКЦІОНАЛЬНОЇ МОДЕЛІ 13 Визначення акторів і варіантів використання 13 Визначення взаємодій акторів і варіантів використання 14 Побудова навігації екранів 19 Деталізація функціональності 22 Інструкція для адміністратора……………………………………………..23 ВИСНОВКИ 27 СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ 28 ДОДАТОК А ВИХІДНИЙ КОД 29 ВСТУП За останні десятиліття бази даних стали основною інформаційних систем і докорінно змінили методи роботи багатьох організацій. Розвиток технології баз даних призвело до створення досить потужних і зручних в експлуатації програм. Вони являють собою зручний і надійний спосіб зберігання номенклатурних даних продукції, відомостей про клієнтські бази та іншої інформації, чиї обсяги перевищують можливості обліку за допомогою звичайних таблиць. Метою курсової роботи є редокументація модуля управління для обліку книг в мережі книжкових крамниць. Дана система включає в себе докладні відомості про книги та крамниці, відомості про авторів та видавництво. Практичне значення полягає у тому, що внесення всіх даних про книги в єдиній базі дозволить систематизувати їх, а також спростити користувачеві доступ до необхідної для роботи інформації, а також вносити зміни, що внаслідок тягне за собою заощадження коштів і часу, потрібних для вилучення необхідних відомостей. Все це повинно позитивно позначитися на ефективності роботи крамниці. РОЗДІЛ 1 ВИЗНАЧЕННЯ СИСТЕМНИХ АРХІТЕКТУР Архітектури програмної системи Для розробки модуля управління даними електронного каталогу бібліотеки використано трирівневу архітектуру. Трирівнева архітектура дає гнучкість команді розробників, дозволяючи оновлювати певну частину програми незалежно від інших частин. Така гнучкість може поліпшити загальний час на розробку та тестування системи. Наприклад, користувацький інтерфейс системи може бути перероблений або модернізований, не впливаючи на функціональність та логіку доступу до даних. Ця архітектурна система ідеально підходить для вбудовування та інтеграції нового програмного забезпечення в існуючу програму. На рисунку 1.1 зображено загальний вигляд трирівневої архітектури. Рис 1.1. Трирівнева архітектура Тепер розглянемо детальніше кожен шар трирівневої архітектури. Презентаційний рівень (Presentation Layer) – це фронтальний рівень в трирівневій архітектурі, який складається з інтерфейсу користувача. Інтерфейс користувача є графічним і доступним через веб-браузер або веб-додаток, та відображає дані корисні для кінцевого користувача. Цей рівень часто побудований на веб-технологіях, таких як HTML5, JavaScript, CSS і зв’язується з іншими шарами через виклик API. Рівень додатку (Application Layer) – містить функціональну бізнес-логіку, яка керує основними можливостями програми. Зазвичай цей рівень написаний на Java, .NET, C #, Python, C ++ і т.д. Рівень даних (Data Layer) – складається з бази даних / системи зберігання даних і рівня доступу до даних. Прикладами таких систем є MySQL, Oracle, PostgreSQL, Microsoft SQL Server, MongoDB тощо. Доступ до даних здійснюється прикладним рівнем через виклики API. Також для проектування додатку використано Java Server Pages, які є частиною трирівневої архітектури. Сервер (як правило, Application або Web Server) підтримує серверні сторінки Java. Цей сервер буде діяти як посередник між клієнтським браузером і базою даних. На діаграмі (Рис. 1.2) зображено архітектуру JSP. Рис 1.2 JSP архітектура Тепер детальніше розглянемо як відбувається потік JSP: 1. Користувач переходить на сторінку JSP і робить запит через у веббраузері. 2. Запит JSP надсилається веб-серверу. 3. Веб-сервер приймає запит .jsp і передає JSP-файл JSP Servlet Engine. 4. Якщо файл JSP був викликаний вперше, то його буде проаналізовано. Наступним кроком є створення сервлету з JSP-файлу. Згенерований сервлет надсилається через Інтернет-форму веб-сервера користувачам веб-браузера. 5. Останнім кроком є відображення HTML результату у веб-браузері користувача. Сторінка JSP - це ще один спосіб написати сервлет без необхідності бути фахівцем з програмування Java. Сторінка JSP обробляється так само, як звичайний сервлет. Як ми бачимо з використанням обраного типу архітектури ми підвищуємо надійність і доступність програмного продукту. Структура бази даних Відповідно до поставленої задачі необхідно створити базу даних, в якій зберігатимуться дані про книги в книжкових крамницях. Для цього необхідні дані про книгу Також потрібно вказати адресу (область, місто, вулиця, номер будинку) та контактні дані (номер телефону, e-mail) крамниці, — це дозволить користувачеві за необхідності зв’язатись із працівниками для отримання потрібної інформації. Також необхідно передбачити додавання чи вилучення інформації. Отже людина, яка користуватиметься створюваною базою даних, зможе: дізнатись про наявність конкретної книги та інформацію про неї; за заданими параметрами пошуку знайти книги певного автора, жанру, року видання, видавництва; вилучити застарілу інформацію, відредагувати чи додати нову. Рис 1.4. Логічна модель даних ER діаграма побудована у стандартній нотації SQL Server 2017. Детальна інформація для відношень, що стосуються обліку книг представлена у таблиці 1.1. Таблиця 1.1 Таблиця ідентифікаторів
1.3 Модуль імпорту даних Data Manipulation Language (DML) – це мова, яка використовується в комп'ютерних програмах або користувачами баз даних для отримання, вставки, видалення або зміни даних в базах даних. В HiveQL мові функція DML визначається за першим словом у запиті: «SELECT» («вибрати»), «INSERT» («вставити»), «UPDATE» («оновити»), і «DELETE» («видалити»). Для заповнення таблиць даними використовують команду «INSERT». DML-script для заповнення таблиці «book» INSERT INTO book VALUES ('1', 'Database development', '0-11-345678-9', '2012', '1', '456'), ('2', 'Database design ', '0-12-333433-3', '2015', '2', '347'), ('3', 'Hadoop: the definition guide', '0-123-45678-0', '2015', '3', '589'), ('4', 'C# for beginners', '0-12-345678-9', '2016', '4', '450'), ('5', 'Java tutorial', '0-321-32132-1', '2014', '5', '496'), ('6', 'Pride and prejudice', '0-55-123456-9', '2016', '5', '105.10'), ('7', 'Artur and miniputa', '0-555-55555-9', '2017', '8', '97.25'), ('8','The legend of the angel', '0-91-045678-5', '2016', '7', '125'), ('9','Before you die', '0-91-335678-7', '2015', '9', '98'), ('10', 'Time waves', '0-99-777777-7', '2017', '4', '157'), ('11', 'Harry Potter and the Philosophers Stone', '0-99-999999-9', '2015', '1', '135'), ('12', 'Harry Potter and the Chamber of Secrets', '1-1111-1111-1', '2015', '4', '135'), ('13', 'Harry Potter and the Prisoner of Azkaban', '1-22-233700-0', '2015', '6', '138'), ('14', 'Harry Potter and the Goblet of Fire', '1-22-233700-3', '2015', '4', '135'), ('15', 'Harry Potter and the Order of the Phoenix', '1-22-233700-6', '2016', '8', '140'), ('16', 'Harry Potter and the Half-Blood Prince', '1-22-233700-4', '2016', '2', '140'), ('17', 'Harry Potter and the Deathly Hallows', '1-22-233700-8', '2016', '1', '145'), ('18', 'South and North', '1-22-233700-5', '2018', '4', '149'); DML-script для заповнення таблиці «author_of_book» INSERT INTO author_of_book VALUES ('1', '1'), ('2', '8'), ('3', '9'), ('4', '10'), ('5', '11'), ('6', '4'), ('7', '3'), ('8', '2'), ('9', '5'), ('10', '5'), ('11', '6'), ('12', '6'), ('13', '6'), ('14', '6'), ('15', '6'), ('16', '6'), ('17', '6'), ('18', '7'); РОЗДІЛ 2 ПОБУДОВА ФУНКЦІОНАЛЬНОЇ МОДЕЛІ Визначення акторів і варіантів використання Діаграма варіантів використання (use case diagram) відображає функціональність, яка реалізована в програмному продукті (Рис. 2.1). Кожен варіант використання це функція у програмному продукті і він вказує на очікувану поведінку системи. Рис. 2.1. Діаграма варіантів використання системи Як бачимо з рисунку наведеного вище, у системі передбачено роботу для адміністратора – авторизованого користувача, який має всі права доступу до програми та її функціональних можливостей, а також операцій над даними, якими оперує система. Визначення взаємодій акторів і варіантів використання. Розглянемо детальніше варіанти використання, які відносяться до підсистеми обліку товарів та реалізації продукції. Авторизація є одною з форм захисту особистих даних та необхідним етапом для доступу до функцій програмного продукту. Не авторизувавшись, користувач не отримає доступу до системи. Таблиця 2.1 Варіант використання «Авторизація»
Формування звітності є необхідною умовою для контролю будь-якого бізнесу. Завдяки гнучкому вибору можна створювати звіти за конкретний день, тиждень, місяць чи рік. Тип звіту залежить від потреб кінцевого користувача. Наприклад, можна створити звіт по назві книги в магазинах та їх наявність. Детальніше про варіант використання описано у таблиці 2.2. Варіант використання «Формування звіту»
Перегляд актуальної інформації – в будь-який момент адміністратор може переглянути список наявних товарів. Це забезпечує постійний швидкий контроль над товарами. Таблиця 2.3 Варіант використання «Переглянути список книг»
Оскільки асортимент товарів не є сталим, наступний варіант використання дає можливість додавати нові позиції у базу даних. Детальніше варіант використання описаний в таблиці 2.2. Варіант використання «Додати Книгу»
У таблиці 2.5 представлено варіант використання для видалення книги з бази даних. Така ситуація може виникнути при помилковому додаванню ениги або коли в базі існують неправдиві дані. Таблиця 2.5 Варіант використання «Видалити книгу»
Таблиця 2.6 Варіант використання «Відредагувати інформацію»
Побудова навігації екранів Одночасно з виділенням ВВ будується навігація екранів успадкованої системи у вигляді діаграми класів UML. Кожен екран показується в моделі як окремий клас, в якому поля-атрибути відповідають, функціональним кнопкам- операції, а кнопкам меню- однойменні відносини. На рисунку 2.2 зображено навігацію екранів. Рис. 2.2 – Навігація екранів Нижче подано зображення екранів програми та їх опис. Для авторизації користувача в системі необхідно ввести логін та пароль у відповідні поля та натиснути кнопку «Увійти» (рис. 2.3). Для тестування створено користувача з логіном та паролем admin. Рис 2.3. Введення логіну та паролю На рисунку 2.4 зображено вигляд головної сторінки аплікації. Збоку знаходиться навігаційне меню. Рисунок 2.4 – Головна сторінка Сторінка «Обрана книга» зображена на рисунку 2.6. Тут можна переглядати книги за вибраними критеріями. Для того, щоб перейти в «Вибрану книгу» потрібно виконати наступні кроки: Переходимо на вкладку «Книги» Вибираєм книгу за критеріями Натискаємо кнопку «Ок» 2.5 Інструкція для адміністратора Створення та розгортання БД Для роботи з Hadoop потрібно встановити на комп’ютер програму VirtualBox. Скачати її можна на офіційному сайті Oracle. Встановлюємо VirtualBox Скачуємо образ Cloudera 5.13 для Virtual Box на офіційному сайті: https://www.cloudera.com/downloads/quickstart_vms/5-13.html Відкриваємо VirtualBox Імпортуємо образ Cloudera; Перевіряємо чи запущений сервер hive2, якщо ні то запускаємо командою в консолі; Запускаємо команду, що створює базу даних і таблиці: hive -f /home/cloudera/Desktop/db.sql Заповнюємо даними таблиці за допомгою: LOAD DATA LOCAL INPATH <шлях до файлу.csv> OWERWRITE INTO TABLE < Назва таблиці> Скачуємо Oracle; Встановлюємо Oracle; Виконуємо підключення; Специфікація DDL/SPL для обраної СУБД Create/Drop/Alter/Use Database CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)]; Drop Database DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE]; Alter Database ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...); Create/Drop/Truncate Table CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [COMMENT col_comment], ... [constraint_specification])] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)] ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) ВИСНОВКИ В результаті виконання курсової роботи було проведено реінженерію модуля управління даними електроного каталогу бібліотеки. В процесі реінженерії було визначено системні архітектури. Визначено акторів, варіанти використання програмного продукту та подано у вигляді UML діаграми. Було описано функціонал існуючої системи, подана навігація екранів та деталізація функціональності у вигляді діаграм діяльності. В роботі подано ER діаграму та DDL код створення відповідних таблиць в базі. Код самої програми подано в додатках даної роботи. Програма реалізує всі зазначені при постановці задачі функції і разом з тим, завдяки відкритій технології, є можливість доповнення її функціональних можливостей та вдосконалення програми в цілому. СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ Ken Schwaber, Jeff Sutherland The Definitive Guide to Scrum: The Rules of the Game. [Електронний ресурс] – Режим доступу: вільний. — https://www.scrumguides.org/docs/scrumguide/v2017/2017-Scrum-Guide- US.pdf#zoom=100 . Триярусна архітектура. [Електронний ресурс] – Режим доступу: вільний. — https://uk.wikipedia.org/wiki/Триярусна_архітектура. Channu Kambalyal. 3-Tier Architecture. [Електронний ресурс] – Режим доступу: вільний. — http://channukambalyal.tripod.com/NTierArchitecture.pdf. Java Web Programming with Eclipse / D. Turner, J. Chae. — December 2009 — 293 p. Офіційний сайт організації Apache Tomcat . [Електронний ресурс] – Режим доступу: вільний. — http://tomcat.apache.org/. Servlets Tutorial. [Електронний ресурс] – Режим доступу: вільний. — https://www.tutorialspoint.com/servlets/. SQL Server Documentation. [Електронний ресурс] – Режим доступу: вільний. — https://docs.microsoft.com/en-ie/sql/ssms/tutorials/connect-query-sql- server?view=sql-server-2017. Дейт К. Введение в системы баз данных.- К.; М.; СПб.: Изд.дом "Вильямс", 2000.- с. [Електронний ресурс]. – Режим доступу https://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html Microsoft SQL Server 2012 Integration Services: An Expert Cookbook / R. Rad, P. Perfeito — Birmingham: Packt Publishing Ltd — 2012 — 564 p. ДОДАТОК А ВИХІДНИЙ КОД РОЗРОБКИ ПРОГРАМИ DDL-script для Hive Структура таблиці “book” CREATE TABLE IF NOT EXISTS book ( id INT, name STRING, ISBN STRING, year_of_publish INT, number_ INT, price DOUBLE ) COMMENT 'Book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “author” CREATE TABLE IF NOT EXISTS author ( id INT, full_name STRING )COMMENT 'Author details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “publishing_house” CREATE TABLE IF NOT EXISTS publishing_house ( id INT, name STRING )COMMENT 'Publishing_house details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “store_” CREATE TABLE IF NOT EXISTS store_ ( id INT, N_store INT, phone_number STRING, email STRING, add_ID INT ) COMMENT 'Store details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “address” CREATE TABLE IF NOT EXISTS address ( id INT, district STRING, city STRING, street STRING, N_of_street INT )COMMENT 'Address details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “genre” CREATE TABLE IF NOT EXISTS genre ( id INT, genre STRING )COMMENT 'Genre details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “publisher_of_book” CREATE TABLE IF NOT EXISTS publisher_of_book ( book_ID INT, pub_ID INT ) COMMENT 'Publisher_of_book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “genre_of_book” CREATE TABLE IF NOT EXISTS genre_of_book ( book_ID INT, genre_ID INT ) COMMENT 'Genre_of_book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “author_of_book” CREATE TABLE IF NOT EXISTS author_of_book ( book_ID INT, auth_ID INT ) COMMENT 'Author_of_book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; Структура таблиці “availability” CREATE TABLE IF NOT EXISTS availability ( store_ID INT, book_ID INT ) COMMENT 'Availability details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; DML-script для Hive INSERT INTO address VALUES ('1', 'Ternopil', 'Ternopil', 'Lvivska', '1'), ('2', 'Ternopil', 'Ternopil', 'Chechova', '8'), ('3', 'Ternopil', 'Ternopil', 'Ruska', '15'); INSERT INTO author VALUES ('1', 'Tom White'), ('2', 'Jamie McGuire'), ('3', 'Luc Besson'), ('4', 'Jane Austen'), ('5', 'Samanta Hayes'), ('6', 'J.K. Rouling'), ('7', 'Elizabeth Haskell'), ('8', 'Mike Boston'), ('9', 'Hugo Boss'), ('10', 'Louis Vuitton'), ('11', 'Dolce Gabbana'); INSERT INTO author_of_book VALUES ('1', '1'), ('2', '8'), ('3', '9'), ('4', '10'), ('5', '11'), ('6', '4'), ('7', '3'), ('8', '2'), ('9', '5'), ('10', '5'), ('11', '6'), ('12', '6'), ('13', '6'), ('14', '6'), ('15', '6'), ('16', '6'), ('17', '6'), ('18', '7'); INSERT INTO availability VALUES ('1', '1'), ('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), ('1', '6'), ('1', '7'), ('1', '8'), ('1', '11'), ('1', '14'), ('1', '15'), ('1', '16'), ('1', '17'), ('2', '1'), ('2', '2'), ('2', '3'), ('2', '4'), ('2', '5'), ('2', '6'), ('2', '7'), ('2', '8'), ('2', '9'), ('2', '10'), ('2', '11'), ('2', '12'), ('2', '15'), ('2', '17'), ('2', '18'), ('3', '6'), ('3', '7'), ('3', '8'), ('3', '9'), ('3', '10'), ('3', '11'), ('3', '12'), ('3', '13'), ('3', '14'), ('3', '15'), ('3', '16'), ('3', '18'); INSERT INTO book VALUES ('1', 'Database development', '0-11-345678-9', '2012', '1', '456'), ('2', 'Database design ', '0-12-333433-3', '2015', '2', '347'), ('3', 'Hadoop: the definition guide', '0-123-45678-0', '2015', '3', '589'), ('4', 'C# for beginners', '0-12-345678-9', '2016', '4', '450'), ('5', 'Java tutorial', '0-321-32132-1', '2014', '5', '496'), ('6', 'Pride and prejudice', '0-55-123456-9', '2016', '5', '105.10'), ('7', 'Artur and miniputa', '0-555-55555-9', '2017', '8', '97.25'), ('8','The legend of the angel', '0-91-045678-5', '2016', '7', '125'), ('9','Before you die', '0-91-335678-7', '2015', '9', '98'), ('10', 'Time waves', '0-99-777777-7', '2017', '4', '157'), ('11', 'Harry Potter and the Philosophers Stone', '0-99-999999-9', '2015', '1', '135'), ('12', 'Harry Potter and the Chamber of Secrets', '1-1111-1111-1', '2015', '4', '135'), ('13', 'Harry Potter and the Prisoner of Azkaban', '1-22-233700-0', '2015', '6', '138'), ('14', 'Harry Potter and the Goblet of Fire', '1-22-233700-3', '2015', '4', '135'), ('15', 'Harry Potter and the Order of the Phoenix', '1-22-233700-6', '2016', '8', '140'), ('16', 'Harry Potter and the Half-Blood Prince', '1-22-233700-4', '2016', '2', '140'), ('17', 'Harry Potter and the Deathly Hallows', '1-22-233700-8', '2016', '1', '145'), ('18', 'South and North', '1-22-233700-5', '2018', '4', '149'); INSERT INTO genre VALUES ('1', 'Science fiction'), ('2', 'Romance'), ('3', 'Travel'), ('4', 'Children’s'), ('5', 'Science'), ('6', 'Fantasy'), ('7', 'Adventure'); INSERT INTO genre_of_book VALUES ('1', '5'), ('2', '5'), ('3', '5'), ('4', '15'), ('5', '5'), ('6', '2'), ('7', '4'), ('7', '6'), ('8', '2'), ('8', '6'), ('9', '2'), ('10', '2'), ('10', '6'), ('11', '6'), ('12', '6'), ('13', '6'), ('14', '6'), ('15', '6'), ('16', '6'), ('17', '6'), ('18', '2'); INSERT INTO publisher_of_book VALUES ('1', '1'), ('2', '1'), ('3', '1'), ('4', '1'), ('5', '1'), ('6', '3'), ('7', '3'), ('8', '3'), ('9', '3'), ('10', '3'), ('11', '4'), ('12', '4'), ('13', '4'), ('14', '4'), ('15', '4'), ('16', '4'), ('17', '4'), ('18', '2'); INSERT INTO publishing_house VALUES ('1','O’Raily'), ('2','Vivat'), ('3','Dream country'), ('4','Fabula'); INSERT INTO store_ VALUES ('1', '1', '+38(498)707-60-61', 'storchyk@gmail.com', '1'), ('2', '2', '+38(698)707-60-61', 'storchyk@gmail.com', '3'), ('3', '3', '+38(998)707-60-61', 'storchyk@gmail.com', '2'); CLIENT (Report ) package package1; import java.sql.*; public class JDBC1 { try { Class.forName(driverName); }catch (ClassNotFoundException e) { System.out.println("Where is your MySQL JDBC Driver?"); e.printStackTrace(); return; } System.out.println("MySQL JDBC Driver Registered!"); Connection con = null; try { con = DriverManager.getConnection("jdbc:hive2://localhost:10000/library", "", ""); Statement stmt = con.createStatement(); ResultSet rs; rs = stmt.executeQuery("SELECT publishing_house.name, book.name, book.ISBN FROM publisher_of_book INNER JOIN publishing_house ON publisher_of_book.pub_ID=publishing_house.id INNER JOIN book ON publisher_of_book.book_ID=book.id WHERE book.price<100"); oracleJDBC conn = new oracleJDBC(); + "" + "" + " Report 1
|