Розробка бази даних з архітектурою "клієнт-сервер". Розробка серверної та клієнтської частини

Загальна характеристика архітектури "клієнт-сервер". Технологічний цикл обробки JAVA-програм. Робота з запитами в MS Access. Імплементація програми з архітектурою "клієнт-сервер" засобами мови JAVA2 EE. Визначення економічної ефективності роботи системи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 07.02.2014
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Метод next повертає true у тому випадку, якщо об'єкт ResultSet успішно перейшов до наступного запису (тобто в підсумковому наборі ще залишилися неопрацьовані записи). Цикл while виводить значення першого поля кожної із записів, що повертають. Якщо підсумковий набір не містить ні одного запису, перші ж виклики next поверне fal se і програма нічого не виведе.

Клас ResultSet може повертати значення різних типів. У прикладі, перше поле інтерпретується як рядок (Stri ng). На щастя, всі стандартні типи даних SQL можуть бути представлені в строковому виді, тому незалежно від типу даних ви завжди зможете одержати значення першого поля й вивести його. Клас ResultSet містить безліч інших методів, включаючи методи вибірки для всіх типів даних SQL і перетворення їх до типів Java. За додатковою інформацією звертайтеся до опису ResultSet у документації API.

Інший важливий метод, executeUpdate, теж викликається з одним аргументом - виконуваною командою SQL. executeQuery та executeUpdate відрізняються тим, що метод executeUpdate призначений для виконання команд, що змінюють стан даних у базі. Наприклад, при виклику executeUpdate для команди CREATE, INSERT або UPDATE повертається число типу int, що визначає кількість модифікованих записів.

Statement s - null: try {

s = c.createStatement():

} catch (SQLException se) {

System.out.printlnC'We got an exception while creating a statement:" +

"that probably means we're no longer connected."):

se.printStackTrace();

System.exlt(1):

}

int m = 0;

try {

m = s.executeUpdate1 INSERT INTO books VALUES " +

"(41472. 'Practical PostgreSGl'. 1212. 4)"): >

} catch (SQLException se) {

System.out.println("We got an exception while executing our query:" +

"that probably means our SQL is invalid"): >

se.printStackTrace():

System.exit(l):

}

System.out.println("Successfully modified " + m + " rows.\n"):

1.6 Нетривіальні можливості JDBC

Як згадувалося вище, крім базового об'єкта Statement в JDBC існує два інших типи об'єктів для подання команд: PreparedStatement й Cal lableStatement. Вони будуть описані нижче.

У даному підрозділі також буде розказано про об'єкти ResultsSetMetaData й DatabaseMetaData. З їхньою допомогою можна запросити в JDBC опис результатів запиту або бази даних. Можливість одержання такої інформації на стадії виконання програми дозволяє динамічно виконувати команди SQL - навіть такі, параметри яких були невідомі на момент написання програми.

Об'єкт CallableStatement.

Об'єкт CallableStatement дозволяє виконувати збережені процедури в JDBC-co-містких базах даних. Кращим джерелом інформації із цього питання є сайт Sun Javasoft (http://java.sun.com/products/jdbc/), оскільки стандарт викликуваних команд (callable statements) змінюється й розвиваються і його практичні застосування залежать від версії Java й JDBC.

Об'єкт PreparedStatement

Об'єкт PreparedStatement представляє підготовлені (prepared) команди SQL, багаторазово виконувані з різними вихідними даними - наприклад, якщо вам треба було вставити в таблицю кілька записів, одну за іншою. Головна перевага PreparedStatement полягає в тім, що команда проходить попередню компіляцію, що рятує від витрат на повторну обробку команд SQL при кожнім виконанні.

PreparedStatement ps = null;

try {

ps = c.prepareStatementC'INSERT INTO authors VALUES (?. ?. ?)");

ps.setlntd. 495);

ps.setString(2. "Light-Williams");

ps.setString. "Corwin");

} catch (SQLException se) {

System.out.println"We got an exception while preparing a statement:" +

"Probably bad SQL.");

se.printStackTrace();

System.exit(l);

}

try {

ps.executeUpdate();

} catch (SQLException se) {

System.out.printlnC'We got an exception while executing an update:" +

"possibly bad SQL. or check the connection.");

se.pnntStackTrace();

System.exit(l);

}

Як видно з лістингу, підготовлена команда виглядає цілком звично, хіба що всі змінні величини заміняються в ній знаками питання (?). Присвоювання виконується методами класу PreparedStatement (setlnt, setString і т.д.). Вибір методу для кожного поля залежить від типу даних цього поля.

Об'єкти PreparedStatement зручні тим, що вони забезпечують автоматичне перетворення типів даних Java у типи SQL. Наприклад, при переході до типу text вам не потрібно турбуватися про екранування символів або лапках.

Зверніть увагу: перший аргумент методу set ідентифікує номер позиції змінної (знаку питання), що привласнюється значення. Одиниця означає перший знак питання, двійка - другої й т.д.

Інша сильна сторона PreparedStatement пов'язана з тим, що об'єкт можна знову й знову використати з новими даними, не створюючи нового об'єкта Statement для кожного набору параметрів. Звичайно, такий підхід більше ефективний, оскільки він обмежується створенням одного об'єкта, а нові значення змінних задаються методами set.

ResultSetMetaData

В JDBC можна запросити докладну інформацію про підсумковий набір запиту. Клас ResultsSetMetaData повертає опис об'єкта ResultSet, отриманого при виклику executeQuery. У ньому міститься інформація про кількість полів, типі даних, іменах полів і т.д.

Із всіх методів класу ResultSetMetaData найчастіше використаються методи getColumnName й getColumnTypeName. Вони повертають відповідно ім'я поля й ім'я його типу даних у вигляді значення типу String.

1.7 Використання JDBC 363

Навіть якщо відволіктися від міркувань ефективності, механізм PreparedStatement набагато надійніше підготовки декількох команд в об'єктах Statement.

ResultSetMetaData rsmd = null;

try {

rsmd = rs.getMetaData();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the metadata:" +

"check the connection.");

se.printStackTrace();

System.exit(l);

}

String columnName = nul;.

columnType = null;

try {

columnName = rsmd.getColumnName(1);

columnType - rsmd.getColumnTypeName(l);

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the column name:"

+ "check the connection.");

se.printStackTrace();

System.exit(l);

}

System.out.print("'The name of the first column is: '");

System.out.print(columnName);

System.out.prin("The data type of the first column is: ");

System.out.println(columnType);

Клас ResultSetMetaData містить багато інших корисних методів. Описи наведені в документації JDK API.

DatabaseMetaData

Нарешті, клас DatabaseMetaData призначений для одержання інформації про базу даних, з якої ви працюєте. Зокрема, він дозволяє одержати відповідь па перераховані нижче питання.

· Які каталоги присутні в базі даних?

· З яким типом бази я працюю?

· Під яким ім'ям користувача я працюю з базою даних?

DatabaseMetaData dbmd = null;

try {

dbmd = c.getMetaData();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the metadata:" +

" check the connection.");

se.printStackTrace();

System.exit(l);

}

String username = null;

Try {

username = dbmd.getUserName();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the username:" +

"check the connection."); se.printStackTrace;

System.exit(l);

}

String url = null;

Try {

url = dbmd.getURL();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the URL:" + "check the connection.");

se.printStackTrace();

System.exit(l);

}

System.out.printlnC('"You are connected to '" + url +

'" with user name '" + username + .....);

Як було сказано вище, кращим джерелом інформації про інші методи DatabaseMetaData є документація JDK API.

1.8 Робота з запитами в MS Access

Програмне забезпечення для роботи з базами даних використовується на персональних комп'ютерах досить давно. Взагалі, база даних - це набір записів і файлів, які організовані спеціальним чином. В комп'ютері, наприклад, можна зберігати прізвища і адреси друзів або клієнтів. Можливо, зберігати всі свої листи, і вони згруповані по адресатам, або набір файлів з даними по фінансовим справам: отримані або виставлені рахунки, витрати по чековій книжці або балансам. Один з типів баз даних - це документи, які набрані за допомогою текстових редакторів і згруповані за темами. Другий тип - файли електронних таблиць, які об'єднані в групи по характеру їх використання. Щоб керувати даними, які розкидані по сотням таблиць і файлів використовуються системи керування базами даних (СКБД). Microsoft Access 97 саме є такою системою. Майже всі сучасні системи побудовані на реляційній моделі керування базами даних. Назва “реляційна” пов'язана з тим, що кожний запис в такій базі даних має інформацію, яка відноситься тільки до одного конкретного об'єкту. В реляційній СКБД всі дані представлені в вигляді таблиць. Інформація про об'єкти визначеного виду представляється в табличному вигляді - в стовпчиках таблиці містяться різні характеристики об'єктів - атрибути (наприклад, адреси клієнтів), а рядки призначені для опису величин всіх атрибутів окремого об'єкта (наприклад, дані про конкретного клієнта). В випадку, коли використовуються функції СКБД для вибору інформації з однієї або декількох таблиць (виконується запит, що є темою даної дипломної роботи), результат представляється у вигляді таблиці. Більше того, можна виконати запит із використанням результатів іншого запиту. Можна об'єднати інформацію з декількох таблиць або запитів. Система керування базами даних дає можливість контролювати структуру і опис даних, роботу з ними і організацію колективного користування інформацією. СКБД також суттєво збільшує можливості і полегшує каталогізацію і ведення великих об'ємів інформації, яка зберігається в численних таблицях. СКБД включає в себе три основних типа функцій: визначення даних, їх обробка й керування даними. Усі ці функціональні можливості в повній мірі реалізовані в Microsoft Access.

В базі даних Access основними об'єктами є таблиці, запити, форми, звіти, макроси і модулі. Таблиця - об'єкт, який використовується для збереження даних. Таблиця складається з полів (стовпчиків), в яких зберігаються різні дані, і записів (рядків). В записи зібрана вся інформація про деякий об'єкт. Запит - об'єкт, який дозволяє користувачу отримати потрібні дані з одної або декількох таблиць. Для створення запиту можна використовувати бланк QBE(запит по зразку) або інструкцію SQL. Можна створювати запити на вибірку, поновлення, видалення або додавання даних. За допомогою запитів також можна створювати нові таблиці, використовуючи дані з одної або декількох існуючих таблиць. Форма - об'єкт, призначений в основному для вводу даних, відображення їх на екрані або керування роботою додатку. Звіт - об'єкт, призначений для створення документа, який в подальшому може бути роздрукований або включений в документ іншого додатку.

Створення запитів на вибірку

Запити дають широкі можливості для вибору, сортування і обчислення з використанням даних однієї таблиці. Дуже важливо вміти використовувати дані з пов`язаних таблиць, допомагає будувати багатотабличні запити майстер запитів.

Запит на вибірку можна використовувати не тільки для відбору даних, але і для їх поновлення. Запит на вибірку має ряд властивостей, які можна використовувати для зміни роботи запиту.

В режимі таблиці доступні самі різні операції з даними - огляд, сортування, фільтрація, поновлення і друк. Але достатньо часто приходиться проводити обчислення і огляд даних з декількох таблиць. Відобразити потрібні дані можна за допомогою запитів.

Після виконання запита на вибірку (який відбирає інформацію з таблиць і інших запитів бази даних, в той час як при виконанні запиту на зміну дані вставляються, поновлюються або видаляються) Microsoft Access створює набір записів, які містять відібрані дані. В більшості випадків з набором записів можна працювати так само, як з таблицею: можна проглянути і відібрати інформацію, роздрукувати і поновити дані. Але на відміну від реальної таблиці, цей набір записів фізично не існує в базі даних. Access створює набір записів з даних таблиць тільки під час виконання запиту. Якщо змінити дані в наборі записів, Access внесе відповідні зміни в таблицю, на базі яких побудований запит.

При вивченні форм і звітів виявляється, що запити є найкращим способом виділення даних, необхідних для вирішення визначеного завдання. Запити можуть слугувати джерелами даних таких елементів керування, як список і поле зі списком, що спрощує введення даних.

Щоб відкрити вікно нового запиту в режимі конструктора, і вікні бази даних потрібно перейти на вкладку Запросі натиснути кнопку Создать, яка міститься з правого боку від списку запитів. Access відкриє вікно діалогу Новый запрос. В нас є вибір: створити запит самостійно в режимі конструктора або скористатися допомогою майстра для створення одного з декількох типів запитів. Щоб відкрити існуючий запит в режимі конструктора, треба виділити його ім`я на вкладці Запросі натиснути кнопку Конструктор. Запит відкривається в режимі Конструктор. В верхній частині вікна запиту знаходяться списки полів (назви стовпчиків таблиці), в нижній частині - бланк запиту.

Вибір даних з однієї таблиці

Одна з переваг запитів є те, що вони дозволяють достатньо швидко відібрати необхідні дані з декількох пов'язаних таблиць. Але запити корисні і при роботі з одною таблицею. Всі методи, які використовуються для роботи з єдиною таблицею, підходять і для складних багатотабличних запитів.

Найкраще за все створити запит на основі одної таблиці так: відкрити вікно бази даних, вибрати потрібну таблицю, розкрити список кнопки Новыйобъектна панелі інструментів і вибрати пункт Новый запрос і натиснути кнопку ОК (якщо рядок Имя таблицыне виводиться в бланку запиту, слід вибрати команду Вид/Имена таблиц). Відкривається вікно конструктора, воно розділене на дві частини (мал. 1). В верхній частині знаходяться списки полів таблиць або запитів, на підставі яких створюється новий запит. В нижній розміщений бланк QBE (Query By Example - запит по зразку), в якому виконується вся робота по створенню нового запиту. Кожний стовпчик бланку представляє одне поле, яке використовується в запиті. Поле може просто належати одній з таблиць, бути обчислюваним (його значення розраховується на основі одного або декількох полів таблиці), або підсумковим, яке використовує одну із вбудованих функцій Microsoft Access.

Рисунок 7. Вікно бланка запиту

Полям запиту можна надавати імена, які будуть відображатися і заголовках стовпчиків при виведенні набору записів запиту, а для генерації обчислюваних полів можна використовувати вирази любого ступеню складності.

В зв'язку з тим, що була виконана команда Вид/Имена таблиц, в даному рядку бланка запиту Access виведе ім'я таблиці, з якої вибране поле. В третьому рядку бланка можна задати, чи потрібно виконувати сортування по вибраному або обчислюваному полю.

Прапорці в бланку Вывод на екран відповідають за вивід на екран полів в наборі записів. По замовчуванню Access виводить на екран всі поля, які містить бланк запиту. Але деякі поля включаються в запит тільки для відбору потрібних записів, а виводити їх на екран зовсім не обов`язково. Щоб виключити таке поле з набору записів, треба зняти його прапорець в рядку Вывод на екран.

Для введення умов відбору записів використовується рядок Условиеотбора і рядок или.

Першим кроком при створенні запиту є вибір полів, які включаються в набір записів. Це можна зробити, просто перетягнувши поле в потрібний стовпчик бланка зі списку полів в верхній частині вікна. При перетягуванні поля вказівник мишки перетворюється в маленький прямокутник.

Якщо потрібно включити в запит всі поля таблиці, то достатньо перетягнути значок “*” зі списку полів в бланк QBE.

Інший спосіб ввести в запит всі поля таблиці - це двічі клацнути на заголовку списку полів в верхній частині вікна: таким чином виділяються всі поля таблиці. Потім перетягнути виділені поля в рядок Поле бланка запиту. Вказівник миші перетвориться в значок з зображенням декількох прямокутників, який показує, що перетягуються декілька полів. Коли відпускається кнопка миші, Access помістить в бланк запиту всі поля таблиці.

Встановлення властивостей полів

В загальному випадку поля, які виводяться в наборі записів запиту, наслідують властивості для відповідних полів таблиці. Можна задати інші значення наступних властивостей: Описание(інформація, яка виводиться в рядку стану вікна запита в режимі таблиці, коли поле стає поточним), Формат поля (представлення даних на екрані), Число десятичных знаков (для числових даних), Маска ввода і Подпись (заголовок стовпчика).

Щоб задати властивості деякого поля, потрібно клацнути на любій чарунці відповідного стовпчика в бланку запита і натиснути кнопку Свойства на панелі інструментів або вибрати команду Вид/Свойства.

Введення умов відбору

Якщо потрібно відібрати записи з конкретним значенням поля, треба ввести його чарунку Условие отбора цього поля. Текстове значення, яке використовується в якості умови відбору, повинне бути вміщене в лапки.

В випадку, якщо нас цікавить декілька значень, вводяться в рядок Условие отбора і розділяються логічним оператором OR.

Коли вводяться умови відбору для декількох полів, то всі вирази в рядку Условие отбора або в рядку илиповинні приймати значення Істина для любого запису, який включається в набір записів запиту. Це означає, що Access виконує логічну операцію AND над умовами відбору, які знаходяться в одному рядку. Щоб результат операції AND мав значення Істина, умови повинні бути істинними; тільки в цьому випадку запис відбирається запитом. Наприклад, ми вибираємо записи з таблиці, в якій знаходяться дані про робітників. Умовою відбору обрано поле Загальний стаж і його значіння:

>10 AND <20

Це означає, що будуть відібрані тільки ті записи (з даними про робітників) значення яких відповідає обом умовам в рядку Условие отбора (стаж більше 10 років, але не перевищує 20). Всі інші записи в таблицю запиту не попадуть.

Коли задаються для деякого поля декілька умов відбору, які з'єднані логічним оператором OR, то для того, щоб запис був відібраний запитом, істинним повинна бути хоча б одна з них. Є два способи задати декілька пов'язаних оператором OR умов для одного поля. Можна ввести всі умови в одну чарунку рядка Условие отбора і з'єднати їх оператором OR. Наприклад, з таблиці про поставників продукції запис в чарунці Условие отбора:

“Київ” OR “Вінниця”, означає, що будуть відібрані всі записи про поставників, що знаходяться в містах Київ і Вінниця.

Інший варіант: введення кожної умови в окрему чарунку рядка или. При використанні декількох рядків илидля відбору запису достатньо виконання всіх умов в одному з рядків или.

Окрім звичайних операторів порівняння Access пропонує три спеціальних оператора, корисних для відбору даних, які виводяться в наборі записів запиту.

BETWEEN. Визначає діапазон значень. Between 10 означає те саме, що і вираз And 20 >=10 And <=20.

IN. Задає список значень, що використовується для порівняння. Вираз IN(“Київ”,“Вінниця”) означає те саме, що і вираз “Київ” OR “Вінниця”.

LIKE. Оператор, корисний для пошуку зразків в текстових полях. В зразок пошуку можна включити символи шаблона, “?” заміняє любий символ в даній позиції, а “*” означає любу кількість символів в даній позиції. Символ “#” вказує, що в даній позиції повинна бути цифра.

Умови відбору для дат і часу

Microsoft Access зберігає значіння дат і часу як числа з плаваючою комою і з подвійною точністю. Значіння з лівого боку від десяткової коми відповідає даті, а дробова частина числа представляє час доби.

Щоб повідомити Access про те, що вводиться дата і час, значення вміщується в символи числа (#). Наприклад, #10 Квітень 2003# і #10/04/03# визначають одну і ту саму дату.

Access дає декілька функцій, які можна використовувати при завданні умов відбору для дат і часу:

Day(дата). Повертає значення дня місяця в діапазоні від 1 до 31.

Month(дата). Повертає значення місяця року в діапазоні від 1 до 12.

Year(дата). Повертає значення року в діапазоні від 100 до 9999.

Weekday(дата). Повертає значення чисел від 1 (Неділя) до 7 (Субота), які відповідають дням тижня.

Hour(дата). Повертає ціле число від 0 до 23, які представляють значення часу.

DatePart(інтервал, дата). Повертає номер кварталу або номер тижня в залежності від того, який код інтервалу задається (“q” - для визначення кварталу, “ww” - для визначення порядкового номера тижня в році).

Date(). Повертає поточну системну дату.

Використання параметрів запиту

До сих пір ми вводили умови відбору безпосередньо в бланк запиту в режимі конструктора. Але на етапі створення запиту на завжди можна визначити, які значіння повинен відшукувати Access. Потрібно включити в запит параметр, і при кожному виконанні запиту Access буде вимагати конкретні умови відбору.

Щоб визначити параметр, потрібно ввести в рядок Условие отборазамість конкретного значення ім'я або фразу, яка вміщена в квадратні дужки. Те, що вміщене всередині квадратних дужок, Access розглядає як ім'я параметра. Воно виводиться в вікні діалогу при виконанні запиту, тому в якості імені параметра розумно використовувати змістовну фразу. В одному запиті можна задати декілька параметрів, при цьому ім'я кожного параметру повинно бути унікальним і інформативним.

Для кожного параметра запиту можна вказати тип даних. Access використовує цю інформацію для перевірки введеного значення. Наприклад, якщо визначено параметр як числовий, Access відкине літерні символи в значенні параметра. З мовчазної згоди Access надає параметрам запиту текстовий тип даних. Якщо потрібно змінити тип даних, треба вибрати команду Запрос/Параметры, і Access виведе на екран вікно діалогу Параметры запроса. В цьому вікні діалогу вводиться ім'я кожного параметра, тип якого ми хочемо визначити, в стовпчик Параметрв такому вигляді, в якому воно було вказане в бланку запиту, але без квадратних дужок. В стовпчику Тип данныхтреба встановити потрібний тип даних, який вибирається зі списку, що розкривається. Після визначення всіх параметрів натискаємо кнопку ОК.

При виконанні запиту Access попросить ввести почергово значення для кожного з параметрів, використовуючи вікно діалогу.

Багатотабличні запити

Розглянувши можливості запитів, які основані на одній таблиці, на базі отриманих знань легко організувати перегляд об'єднаних даних з декількох пов'язаних таблиць. Здатність запитів відбирати дані з декількох таблиць особливо корисна при створенні форм і звітів.

Рисунок 8. Конструктор запиту

Розглянемо приклад, в якому об'єднується інформація з двох таблиць. В вікні бази даних треба перейти на вкладку Запросыі натиснути кнопку Создать. В вікні діалогу Новый запросвибрати Конструкторі натиснути кнопку ОК. Access відкриє вікно нового запиту в режимі конструктора і виведе на екран вікно діалогу Добавление таблицы. Вікно діалогу дозволяє вибрати таблиці і запити, які будуть базовими для нового запиту. Вибираються дві таблиці і закривається вікно.

Якщо зв'язок між базовими таблицями був раніше визначений, то верхня частина вікна запиту в режимі конструктора буде виглядати так, як показано на мал. 2. Access пов'язує використовувані в запиті таблиці на основі інформації про зв'язок, яка задана при їх створенні. Access зв'язок в вигляді лінії, яка з'єднує первинний ключ одної таблиці з відповідним полем іншої. Якщо зв'язок між таблицями не визначений, Access сам прийме рішення, встановивши зв'язок між полями з однаковими іменами і співпадаючими типами даних.

Користувач включає в бланк запиту необхідні поля з двох таблиць. Побачити результат запиту можна, переключившись у режим таблиці.

Як уже згадувалося, вікні режиму таблиці можна виконувати з набором записів запиту майже всі дії, які доступні для звичайних таблиць.

Одним з найцікавіших аспектів багатотабличних запитів є можливість зміни даних вихідних таблиць прямо в наборі записів.

Створення запиту на основі іншого запиту

При створенні запита в режимі конструктора вікно діалогу Добавление таблицы дозволяє вибрати в якості джерела даних для нового запиту не тільки таблиці, але і запити. Дійсно, побудова одного запиту на основі іншого - це ще один спосіб роботи з даними з декількох таблиць: спочатку створюється один запит, за допомогою якого вирішується визначене коло задач і відбирається сукупність даних з декількох таблиць, а потім на його основі будується інший для отримання кінцевого набору записів.

Рисунок 9. Діалогове вікно Новый запрос

В вікні бази даних перейти на вкладку Запросыі натиснути кнопку Создать.

2. В діалоговому вікні Новыйзапросвибрати майстра Простой запрос (Рисунок 9). Натиснути ОК.

3. В діалоговому вікні (Рисунок 10), що з'явилося, вказати ім'я таблиці або запита, на якому буде збудований новий запит. Потім вибрати поля, з яких повинні бути відновлені дані.

Рисунок 10. Створення простого запиту

Якщо необхідно, вказати додаткові таблиці або запит, а потім вибрати з них поля, які повинні бути використані.

4. Закінчивши роботу в цьому діалоговому вікні, натиснути ОК. Потрібно слідувати інструкціям, які виникають в наступних діалогових вікнах майстра. В останньому діалоговому вікні користувачу пропонується вибір виконати запит або продивитися його структуру в режимі конструктора. Якщо отриманий запит не відповідає вимогам, можна знову звернутися до майстра або внести зміну в запит в режимі конструктора.

Відкриття, копіювання, збереження, перейменування і видалення запитів

Користувач може відкрити в режимі конструктора різні запити: запит на вибірку, перехресний запит і запит на зміну. Запит на вибірку і перехресний запит також можна відкрити в режимі таблиці для огляду результатів.

Можна створити ярлик для відкриття об'єкта бази даних, яка знаходиться або на комп'ютері користувача, або на файловому сервері мережі або в директорії для спільного доступу. В Microsoft Windows можна створити ярлик, перемістивши за допомогою миші об'єкт з вікна бази даних в робочий стіл або папку. Інший спосіб - клацнути правою кнопкою миші потрібний об'єкт (запит, наприклад) і вибрати команду Создать ярлык.Щоб створити ярлик не на робочому столі, треба ввести новий шлях в поле Размещение.

Для копіювання вибирається об'єкт і натискається кнопка Копироватьна панелі інструментів. Під час копіювання об'єкта в іншу базу даних, закривається поточна база і відкривається та, в яку потрібно вставити об'єкт. При відкритому вікні бази даних натиснути кнопку Вставитьна панелі інструментів.

Збереження запиту відбувається шляхом натискання кнопки Сохранитьна панелі інструментів.

Для збереження копії об'єкта бази даних з новим ім'ям або в іншому файлі, при умові що об'єкт відкритий або виділений, потрібно вибрати команду Сохранить как/Экспортв меню Файл. Щоб зберегти об'єкт в поточній базі даних, треба вибрати параметр В текущей базе данныхв діалоговому вікні Сохранение объекта, ввести ім'я об'єкта і натиснути ОК.

Для перейменування запита потрібно впевнитися, що об'єкт бази даних закритий. Далі в вікні бази даних вибрати вкладку Запросы, яка містить потрібний об'єкт. Натиснути кнопку миші на імені об'єкта, а потім знову натиснути кнопку миші, щоб змінити ім'я, ввести нове ім'я.

Для видалення об'єкта виділити його і натиснути кнопку Delete.

Оптимізація запитів

Існує ряд способів прискорення виконання запитів:

- Стискати бази даних

- Індексувати поля

- Вибирати типи даних мінімального розміру

- При створенні запиту не додавати лишні поля в запит. Зняти прапорець Вывод на экран для полів, зміст яких не виводиться в запиті

- Використовувати для умов відбору вирази, які дозволяють оптимізувати запит

2. МАТЕМАТИЧНО-ІНФОРМАЦІЙНА СИСТЕМА НА ОСНОВІ АРХІТЕКТУРИ “КЛІЄНТ-СЕРВЕР”

2.1 Основні поняття формальної моделі

Оглянувши основні проблеми, що постають перед моделюванням розподілених інформаційних систем (далі ІС) типу клієнт-сервер, перейдемо до формального опису таких ІС (використовуючи описані вище підходи). Виходячи з основних принципів опису системи, виділимо основні компоненти системи - її входи та виходи. Входом системи є множина запитів клієнтів системи, виходами - множина відповідей системи на запити. У загальному випадку реакція визначається не лише поточним запитом, а й усіма попередніми. Для усунення необхідності кожен раз обробляти усі попередні запити клієнта, вводиться поняття стану інформаційної системи. Стан інформаційної системи є агрегованою історією запитів до системи. У системі виділяються окремі страти, тобто вона є багаторівневою і на кожному рівні міститься не менше однієї автономної підсистеми (яка фактично є окремою

системою).

На кожному з рівнів (крім верхнього та нижнього) традиційно розглядається три вхідних потоки - потік зовнішніх збурень, потік розпоряджень з вищого рівня, потік реакцій нижчого рівня. Перші два потоки в моделі розподілених інформаційних систем ототожнюються, оскільки вища система є клієнтом системи нижчого рівня. Отже, запити з системи вищого рівня, з одного боку, можуть розглядатися як вхідні збурення, а з іншого - запити страти вищого рівня.

Формальна модель повинна забезпечувати можливість ієрархічного з'єднання систем. Таке з'єднання базується на спрямуванні вихідного потоку нижчої системи у вищу систему, що разом з вхідним збудженням складає вхідний сигнал для вищої системи. У формуванні відповіді сервісу на запит користувача виділимо такі етапи:

1. отримання запиту від користувача або вищого сервісу;

2. формування запитів до нижчих сервісів;

3. отримання відповідей від нижчих сервісів;

4. формування відповіді на запит.

Аналізуючи ці етапи, відзначимо два моменти:

* якщо розглядати тільки верхній зріз системи, то при його описі потрібно виділяти як потік запиту користувача так і потік реакцій підкомпонент;

* в системі в цілому (зі всіма рівнями включно) слід визначати лише один вхідний потік - запити користувачів (адже відповіді нижчих систем визначаються запитами вищого сервісу, а отже, вхідними запитами користувачів).

Деталізація системи проводиться до певного найнижчого рівня. Для функцій цього рівня розглядаються лише вхідні запити користувача (вищої системи). Такий підхід узгоджується з тведженням про неістотність опису вхідних потоків від нижчих систем для системи взагалі. Уся система з усіма її рівнями розглядається як система найнижчого рівня (адже в ній завжди можна виділити компоненти найнижчого рівня).

При аналізі поведінки системи модель спрощується завдяки усуненню параметрів з запитів користувача та реакцій систем. Досліджуючи певні особливості функціонування системи, можна взагалі усувати або запит користувача, або вхідний потік від нижчих систем. Досліджуючи систему в цілому, а не тільки її певний зріз, розглядається лише вхідні запити користувачів.

При розгляді правил композиції систем та утворення систем внаслідок застосування до їх компонент певних операцій, враховуємо, що запити до компонент формуються результуючою системою, а відповіді компонент направляються до неї для формування остаточної реакції.

2.2 Модель системи

Автоматна модель розподіленої ІС описується традиційним впорядкованим набором

де Q - вхідні запити ІС, R - відповіді нижчих систем, A - вихідний алфавіт ІС, St-множина станів системи, ?, ш - функції переходів та виходів.

Розглянемо детальніше кожен з об'єктів. Множину символів, що складають вхідний алфавіт системи, опишемо у такий спосіб:

де множина IdQ - множина унікальних ідентифікаторів запитів.

Множину символів, що складають вихідний алфавіт системи, опишемо у такий спосіб:

де IdA - множина унікальних ідентифікаторів відповідей.

Множину символів, що складають відповіді нижчих систем, опишемо наступним чином:

де IdR - множина унікальних ідентифікаторів відповідей нижчих систем.

Кожен запит до ІС та її відповідь містить дві частини: ідентифікаційну та параметричну. Ідентифікаційна - однозначно визначає тип запиту (наприклад: запит на отримання даних, оновлення, розміщення замовлення тощо). Параметри є фактично додатковою інформацією, що супроводжує запити та відповіді на них ІС (наприклад: текст Web-сторінки, вибірка з бази даних, прайс-лист системи Internet-маркетингу -параметри відповіді, критерії на вибірку даних, нове замовлення - параметри запиту). Опис стану системи також базується на аналогічному підході: Загальну схему конкретного стану St інформаційної системи можна описати так:

Де St1… StNst - стани компонент інформаційної системи.

Таким чином, формальний опис стану ІС має рекурсивний характер (до певного найнижчого рівня деталізації, на якому стани мають атомарний характер).

Кожен стан St(i) містить ідентифікатор стану IdSt та стани усіх підсистем, що належать до ІС. Кількість станів обмежується кількістю можливих станів підсистем.

Проте реально їх кількість істотно менше внаслідок обмежень та взаємозв'язків, що можуть існувати між станами системи. Серед таких обмежень виділимо два основні типи:

* внутрішні стосовно одне одного (типу обмежень на унікальність або простих обмежень типу Check);

* зовнішні (типу зовнішніх ключів).

Ієрархія станів ІС повинна узгоджуватися та породжуватися відповідною FHD. Найнижчий рівень деталізації кожної з компонент відповідає атомарним функціям. Результуючу множину станів ІС можна подати як ERD цієї ІС. Стосовно ERD станів системи ставиться задачу нормалізації. У такому випадку систему з нормалізованими станами вважатимемо нормалізованою. Так параметри станів ІС формують базу даних ІС. Аналіз формальної моделі клієнт-сервер системи приводить нас до висновку про принципову схожість класичних інформаційних систем, що будуються на технологіях баз даних, та систем з архітектурою клієнт-сервер. Фактично, ми говоримо про узагальнення понять баз даних в моделях найрізноманітніших інформаційних систем (таких, як Web-системи). База даних системи у такому разі розглядається у ширшому розумінні, ніж просто набір спеціальних об'єктів (наприклад таблиць), що обробляються та підтримуються певною СУБД. Навіть набір статичних Web-сторінок, що зберігаються, як окремі файли у файловій системі сервера, розглядається як база даних. Модель даних у будь-якому випадку повинна належним чином документуватись та проектуватись (як правило, з використанням такого інструментарію як ERD). Проте не викликає сумнівів те, що для побудови серйозних інформаційних систем з великими об'ємами даних як засоби підтримки даних повинні використовуватися промислові СУБД реляційного або об'єктно-реляційного типу. Встановлення відповідності між базою даних системи та станом її автоматної моделі не є випадковим, а грунтується на фундаментальних засадах теорії формальних систем. Актуальний стан системи є фактично історією системи, тобто результатом усіх попередніх запитів клієнтів. З точки зору інформаційних систем найкращим способом агрегації усіх попередніх запитів є ведення їх бази даних. Так, аналізуючи вміст реляційної бази даних, відзначимо, що він фактично є історією SQL-запитів, що формулювались до бази даних (тобто станом системи в розумінні теорії формальних систем).

Визначення точної реакції системи на запит клієнта залежить не лише від ідентифікаторів запиту та стану ІС. Реакція системи залежить також від параметрів Pj запиту та бази даних ІС. У відповіді системи також міститиметься, окрім ідентифікатора, й параметрична компонента. Проте в межах автоматної моделі неможливо повністю описати реакцію системи на запит клієнта (враховуючи, що множина можливих запитів з параметрами та станів з БД може мати велику розмірність, зокрема бути скінченні або мати потужність континуум). Відповідь системи на запит клієнта формується як автоматна реакція мережі автоматів (відповідно з ієрархічною структурою ІС) із корекцією та доповненням відповідно до параметрів запиту та БД ІС. Параметричну компонента системи є другорядною при описі функціональності системи. Параметрична компонента усувається з розгляду шляхом використання стохастичних та недетермінованих автоматних моделей. Тоді параметри запитів, відповідей та БД ІС в моделі не розглядаються, а реакція системи перестає бути повністю визначеною. У стохастичній моделі замість алгоритмічної корекції відповіді сервера вводяться імовірнісні характеристики можливих переходів та виходів. У недетермінованій моделі залишаться лише можливі переходи та відповіді на стан.

Реакція системи може бути неповністю визначеною і у випадку параметричного опису. Тобто реакція системи на кожен запит описується множиною можливих переходів, виходів та їх імовірностей.

Функція переходу:

Функція виходу:

Ми отримаємо імовірнісно-автоматну модель ІС. Розглянемо проблему формування імовірностей для опису реакції системи на запит. Можливі два підходи до її розв'язання:

1. визначення імовірності конкретної реакції системи на запит користувача зі врахуванням значення конкретного параметра;

2. визначення загальної імовірності конкретної реакції системи на запит користувача без врахування значення конкретного параметра;

Перший підхід забезпечує максимально можливу визначеність реакції інформаційної системи на запит користувача. Проте недоліком такого підходу є велика складність визначення імовірності переходу. Крім того, при використанні операції усунення параметра потрібно буде перераховувати імовірності переходів. Для проведення фізичної оптимізації також доцільно використовувати загальні значення імовірностей реакції системи. Тому доцільніше використовувати другий підхід. У такому разі імовірність реакції визначається для кожної пари (St,Q) без врахування значень параметрів запиту до системи та її бази даних. Визначеність поведінки системи буде меншою ніж у першому випадку, проте для усунення параметрів з розгляду та фізичної оптимізації системи непотрібно буде додаткових перетворень. Якщо в системі існуть запити з такими параметрами, що суттєво впливають на реакцію системи та є важливими для її оптимізації, тоді пару (параметр, запит) можна перетворити в окремий запит.

3. ІМПЛЕМЕНТАЦІЯ ПРОГРАМИ З АРХІТЕКТУРОЮ “КЛІЄНТ-СЕРВЕР” ЗАСОБАМИ МОВИ JAVA2 EE

3.1 Постановка задачі

Для демонстрації архітектури “клієнт-сервер”, засобами мови JAVA2 EE, я вирішив створити програму для запису слухачів на семінари.

Програма повинна вміти робити наступне:

· Вести облік семінарів;

· Переглядати, додавати, редагувати та знищувати записи про людей, які вирішили прослухати обраний семінар;

3.2 Реалізація клієнтської частини

Перед створенням клієнтсьої я вирішив ознайомитись з засобами мови JAVA2 EE для роботи з мережами та вже існуючими інструментами налагодження підключення до мережевих програм, а саме із програмою telnet.exe, що входить до складу операційної системи UNIX та операційних систем сімейства Windows (у трохи спрощеному варіанті). Необхідно врахувати, що вона не є обов'язковим компонентом операційної системи, необхідно перевірити чи встановлена комп'ютері. Якщо її неможливо запустити з командного рядка, тоді потрібно ще раз завантажити програму втановлення операційної системи й вибрати її в списку пропонованих для встановлення компонентів.

Програма telnet може використовуватись не тільки для з'єднання з деяким комп'ютером, та роботи з електронною поштою, але й для роботи з іншими мережевими сервисамі. Нижче приводиться один із прикладів використання цієї програми.

telnet time-A.timefreq.bldrdoc.gov 13

50692 97-09-01 2 1:4 3:1 5 50 0 0 5 0.0 UTC(NIST) *

File Edit Settings. Help

~$ telnet time-A.timefreq.bldrdoc,gov 13

Trying 132.163.4.102...

Connected to t1me-A.timefreq.bldrdoc.gov.

Escape character 1s ' * ] ' .

52088 01-06-28 14:35:13 50 0 0 644.8 UTCCNIST)

Connection closed by foreign host.

~$ D

Програма telnet підключилася до сервісу "визначення часу", що працює на більшості комп'ютерів під управлінням операційної системи UNIX. Зазначений у цьому прикладі сервер перебуває в Національному Інституті Стандартів і Технологій (National Institute of Standards) в Боулдері, штат Колорадо, США. Його системний час синхронізований із цезієвмми атомними годинниками. (Звичайно, отримане значення поточного часу буде не зовсім точним, через затримки, пов'язаних з передачею даних у мережі.) По домовленості, сервіс "визначення часу" завжди пов'язаний з портом 13.

При описі мережних технологій портом називається не якийсь фізичний прилад, а абстрактне поняття, що означає організацію з'єднання між сервером і клієнтом. Програмне забезпечення сервера постійно працює на віддаленому комп'ютері і очікує надходження мережевого трафіка на порт 13. При одержанні операційною системою на віддаленому комп'ютері мережного пакета із запитом на підключення до порту 13 активізується процес-слухач сервера й встановлюється з'єднання.

Таке з'єднання може бути перервано одним з його учасників.

Після запуску програми telnet з параметром time-A. timef req.bldrdoc. gov

і портом 13 незалежне мережне програмне забезпечення перетворить рядок

time-A. timef req. bldrdoc .gov в IP-адресу 132.163. 135. 130. Потім надсилає запит на з'єднання із заданим комп'ютером по порту 13.

Після встановлення з'єднання програма на віддаленому комп'ютері посилає назад рядок з даними, а потім закриває з'єднання. У загальному випадку клієнти й сервери до закриття з'єднання можуть брати участь у більше складних діалогах.

Ще один більше цікавий експеримент, який варто виконати з відключенням еха-відповіді уведених символів. В операційній системі Windows це можна зробити, указуючи в режимі командного рядка команду

set LOCAL_ECHO off.

Далі

1. Підключитись до сервера java.sun.com до порта 80.

2. Увести рядок GET / HTTP / 1.0 точно в показаному форматі.

3. Тепер двічі натисніть клавішу <Enter>.

Відповідь сервера має вже знайомий нам вид сторінки тексту у форматі HTML, а саме основний Web-сторінки компанії Sun, присвяченої технологіям Java. Саме так звичайний броузер одержує всі Web-сторінки.

import java.io.*;

import java.net.*;

public class SocketTest {

public static void main(String[] args) {

try {

Socket s = new Socket("time-A.timefreq.bldrdoc.gov" 13);

BufferedReader in = new BufferedReader

(new InputStreamReader (s.getlnputStreamf) ) );

boolean more = true;

while (more) {

String line = in.readLine();

if (line == null)

more = false;

else

System.out.println(line);

} catch (IOException e) {

e.printStackTrace();

}

}

Це дуже проста програма, але ще до аналізу двох її ключових рядків необхідно звернути увагу на те, що в ній імпортується пакет java.net і обробляються виключні ситуації при виконанні операцій уведення/виводу в блоці try/catch . (При роботі з мережами можуть виникати збої, тому в багатьох мережних методах передбачені повідомлення про помилки уведення/виводу. Для успішної компіляції коду ці повідомлення необхідно перехоплювати й обробляти відповідним чином.).

Цей приклад містить наступні два ключові рядки.

Socket s = new Socket("time-A.timefreq.bldrdoc.gov", 13);

BufferedReader in = new BufferedReader

(new InputStreamReader (s.getlnputStreamf) ) ) ,

Перший рядок дозволяє відкрити сокет. Сокет - це абстрактне поняття, яке позначає програмне забезпечення, що дозволяє організувати операції обміну даними між програмами. Конструкторові сокета передається адреса вилученого сервера й номер порту. При невдалому з'єднанні виникає виняткова ситуація UnknownHostException, а при наявності якихось інших проблем-- виключна ситуація IOException. Клас UnknownHostException є класом наслідником від IOException, тому в цьому простому прикладі обробляється тільки виняткова ситуація базового класу.

Після відкриття сокета метод getlnputStream класу java.net. Socket віз-обертає об'єкт потоку InputStream, який можна використати як звичайний файл. Після одержання потоку програма приступає до виконання наступних дій.

1. Зчитує всі відправлені сервером символи за допомогою методу readLine.

2. Виводить кожен рядок на стандартному пристрої виводу.

Дійсний процес триває доти, поки не закінчиться потік або не

відключеться від сервера. У такому випадку метод readLine поверне null.

Клас Socket дуже зручний у роботі, тому що приховує всі складні подробиці встановлення мережного з'єднання й передачі даних у мережі. А пакет java.net надає такий же програмний інтерфейс, що використовується для роботи з файлами.

Отже, після дослідження питаннь підключення до серверів та інших мережевих сервісів а програмі “клієна” було розроблені наступні основні методи:

· Метод підключення до сервера

· Метод для отримання списку слухачів;

· Метод для отримування інформації про слухача;

· Метод для додавання інформації про слухачів до бази даних;

· Метод для редагування інформації про слухачів;

· Метод для знищення слухачів з бази даних;

Рисунок 6. Вигляд готової програми клієнта

база дані java access

Та ряд допоміжних: метод, який викликається, коли втрачається зв'язок із сервером, в цьому випадку всі назви семінарів видаляються і створюються, умови для повторного підключення до сервера (активується відповідна кнопка та пункт меню), метод, який центрує вікно програми при її запуску, методи реалізації технології Drag'n'Drop, що дозволяє змінювати семінар слухача простим перетягуваням мишки з таблиці до спику семінарів у вікні програми.

3.3 Реалізація серверної частини

Тепер після створення клієнта, що може одержувати дані з мережі, спробуємо створити сервер, що може посилати дані.

Спочатку, досділимо питання написання серверів засобами мови JAVA2 EE.

Після запуску програми сервера вона переходить у режим очікування приєднання клієнтів до своого порту. Необхідно вибрати номер порту, що не використається ніякими стандартними пристроями. Наведена нижче команда дозволяє створити сервер з портом 8189.

ServerSocket s = new ServerSocket(8189);

Потім показана нижче команда повідомляє програмі, що вона повинна очікувати підключення клієнтів до заданого порту.

Socket incoming = s. Accept();

Відразу після підключення клієнта до порту за допомогою переданого по мережі корректного запиту цей метод посилає об'єкт Socket, що представляє встановлене з'єднання. Даний об'єкт можна використати для читання вхідних й запису вихідних даних так, як показано нижче.

BufferedReader in = new BufferedReader

(new InputStreamReader(incoming.getlnputstream()));

PrintWriter out = new PrintWriter

(incoming.getOutputStreamf), true) ;

Всі дані вихідного потоку сервера стають даними вхідного потоку клієнта й навпаки, всі дані вихідного потоку клієнта стають даними вхідного потоку сервера.

Потоки будуть виконувати роль читачів і тих, що записують дані за допомогою методу readLine (він визначений у класі Buf feredReader, але не в класі InputStream) і методу print (він визначений у класі PrintWriter, але не в класі OutputStream) відповідно. Для передачі бінарних даних необхідно перетворити ці потоки в потоки DatalnputStream і DataOutputStream. А для передачі об'єктів сериалізаціиї варто використати потоки ObjectlnputStream й ObjectOutputStream.

Допустимо, що програма-клієнт відправила вітання:

out.println("Hello! Enter BYE to exit.");

При використанні утиліти telnet для підключення до програми-сервера на порті 8189 показане вище вітання буде відображено у вікні термінала.

У цієї простої програми-сервера построчно зчитуються вхідні дані, відправлені програмою-клієнтом, і відображаються на екрані в режимі ехо-відповіді. Такім чином даний приклад демонструє одержання вхідних даних від програми-клієнта. Програма-сервер повинна обробити отримані дані й дати адекватну відповідь.

String line = in.readLine();

if (line != null) {

out.println("Ехо-відповідь: " + line);

if (line.trim().equals("BYE"))

done = true;

}

else

done = true;

Нарешті, варто закрити використовуваний сокет.

incoming.close();

От і всі! Кожна програма-сервер, наприклад, Web-сервер, виконує такий же цикл основних дій.

1. Одержання команди від програми-клієнта ("дайте мені потрібну інформацію") із вхідного потоку даних.

2. Пошук заданої інформації.3. Посилка клієнтові знайденої інформації у вихідний потік даних.

Далі показаний повний текст описаної вище програми-сервера.

import java.io.*;

import java.net.*;

public class EchoServer {

public static void main(String[] args ) {

try {

// Створити сокет

ServerSocket s = new ServerSocket(8189);

// Перейти в режим очікування

// запитів з боку клієнтів

Socket incoming = s.accept();

BufferedReader in = new BufferedReader

(new InputStreamReader(

incoming.getlnputStreamf)));

PrintWriter out = new PrintWriter

(incoming.getOutputStreaml),

true /* autoFlush * / ) ;

out.println( "Hello! Enter BYE to exit." );

// Ех-відповідь запиту клієнта

boolean done = false;

while (!done) {

String line = in.readLine();

if (line == null)

done = true;

else {

out.println("Echo: " + line);

if (line.trim().equals{"BYE"))

done = true;

incoming.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

Для перевірки працездатності програми її потрібно відкомпілювати й запустити. Потім необхідно підключитися за допомогою утиліти telnet до сервера 127.0.0.1 і порту 8189.

IP-адреса 127.0.0.1 називається локальною адресою зворотного зв'язку (local loopback address), яка позначає локальний комп'ютер. Оскільки ехо-відповідь буде відображатися на екрані локального комп'ютера, те саме до нього й треба підключитися в даному прикладі.

При використанні підключення, що комутирує, для виконання цього приклада буде потрібно його встановити. Справа в тому, що навіть при взаємодії з локальним комп'ютером у нашому випадку потрібно завантажити необхідне мережне програмне забезпечення. Тепер будь-який користувач мережі може одержати доступ до програми-сервера при

умові, що йому відома IP-адреса вашого комп'ютера й номер порту.

При підключенні до цього порта буде отримане повідомлення

Hello! Enter BYE to exit.

Введем будь-яку фразу й одержимо на неї ехо-відповідь. Для відключення від програми-сервера слыд ввести BYE (всі символи у верхньому регістрі).

~$ telnet local host 8189

Trying 12?.0.0.1 ...

Connected to local host.local domain.

("Escape character Is ' Л ] ' .

Hello! Enter BYE to exit.

Hello there! How are you today?

Echo: Hello there I How are you today?

I am fine., thanks. And you?

|Echo: I am fine, thanks, And you?

BYE

Echo: BYE

Connection closed by foreign host.

* $ 0

У попередньому простому прикладі програми-сервера не передбачена можливість одночасного підключення відразу декількох програм-клієнтів. Звичайно, програма-сервер працює на комп'ютері-сервері, а програми-клієнти можуть одночасно підключатися до неї за допомогою мережі Internet з будь-якої частини світу. Якщо на сервері не передбачена обробка одночасного підключення декількох клієнтів, те це приведе до того, що один клієнт може монополізувати доступ до даної програмі-серверу протягом тривалого часу. Щоб уникнути таких ситуацій варто вдатися до допомоги потоків.

Для кожного нового з'єднання із сокетом, тобто при успішній обробці запиту на з'єднання, буде запущений новий потік, що подбає про організаціївзаємодії між програмою-сервером і даною програмою-клієнтом. Для цього в програмі-сервері варто організувати показаний нижче цикл.

...

Подобные документы

  • Переваги архітектури "клієнт-сервер", порівняльна характеристика програмних засобів розробки його систем. Основні концепції функціонування системи IP-телебачення на базі архітектури "клієнт-сервер". Механізм взаємодії клієнта і сервера в середі Delphi.

    реферат [955,9 K], добавлен 30.01.2010

  • Робота з клієнт-серверними додатками на основі сокетів. Розробка програм сервера та клієнта для обробки запитів клієнта сервером. Можливості програм сервера та клієнта. Створення гри "хрестики-нулики" на основі сокетів. Програмне забезпечення сервера.

    лабораторная работа [181,8 K], добавлен 23.05.2015

  • Загальна характеристика розвитку електронної торгівлі в Україні на сучасному етапі. Сутність і переваги клієнт-серверної технології, вибір мови програмування. Розробка структури бази даних та веб-сервера MySQL 4.1.8 для прийому замовлень в режимі online.

    дипломная работа [2,5 M], добавлен 24.09.2012

  • Створення баз даних за допомогою стандартних бібліотек Java та клієнт-серверних програм. Основні стандартні класи і методи бібліотек SQL та swing, бібліотек, що дозволяють опрацьовувати дані СУБД та навчитись концепціям програмування мовою Java.

    лабораторная работа [215,3 K], добавлен 04.10.2011

  • Принципи організації баз даних (БД) при проектуванні клієнт-серверних додатків. Інструментальні засоби створення системи. Різновиди архітектур БД. Функції та програмна реалізація. Економічне обґрунтування доцільності розробки програмного продукту.

    дипломная работа [2,1 M], добавлен 22.10.2012

  • Загальна структура автоматизованої інформаційної системи, особливості її технічного, програмного, правового та економічного забезпечення. Характеристика апаратної платформи сучасних інформаційних систем. Основні компоненти архітектури "клієнт-сервер".

    контрольная работа [19,8 K], добавлен 22.08.2011

  • Характеристика засобів масового спілкування, які надає Інтернет. Проектування багаторівневої архітектури клієнт-серверу. Розробка бази даних соціальної мережі, використання шаблонізатора для генерації сторінок. Тестування програмного забезпечення.

    дипломная работа [4,5 M], добавлен 18.03.2012

  • Опис мови програмування PHP. Стратегія Open Source. Мова розмітки гіпертекстових документів HTML. Бази даних MySQL. Обґрунтування потреби віддаленого доступу до БД. Веб-сервер Apache. Реалізація системи. Інструкція користувача і введення в експлуатацію.

    курсовая работа [42,9 K], добавлен 21.12.2012

  • Аналіз системних вимог та обґрунтування методу проектування системи. Алгоритм розв'язання задачі. Інформаційне, технічне, програмне та організаційне забезпечення. Вибір методу проектування архітектури та моделі функціонування системи "клієнт-банк".

    дипломная работа [3,1 M], добавлен 12.05.2017

  • Проектування бази даних для КП "ВодГео" - комунального підприємства у сфері водопостачання та водовідведення в м. Сміла. Предметна область, вимоги до продукту. Розробка інтерфейсу програми. Вибір архітектури та сервера бази даних, її логічна структура.

    курсовая работа [1,2 M], добавлен 14.07.2015

  • Різновиди архітектур баз даних. Архітектура "файл-сервер" і локальні бази даних. Обґрунтування вибору архітектури стосовно проектованої системи. Основні концепції мови SQL. Структура запитів до окремих таблиць. Інтерфейс користувача проектованої системи.

    дипломная работа [972,5 K], добавлен 26.10.2012

  • Історія розробки систем управління базами даних. Принципи проектування баз даних. Розробка проекту "клієнт-серверного" додатку, який гарантує дотримання обмежень цілісності, виконує оновлення даних, виконує запити і повертає результати клієнту.

    курсовая работа [1,8 M], добавлен 22.04.2023

  • Створення гнучкої клієнт-серверної системи інформаційної підтримки підвищення кваліфікації персоналу ДП № 9 з застосуванням мови програмування PHP, системи керування базами даних MySQL. Розробка алгоритмів, програмна реалізація основних процедур системи.

    дипломная работа [1,8 M], добавлен 26.10.2012

  • Проектування інформаційної системи для супроводу баз даних. Моделі запиту даних співробітником автоінспекції та обробки запиту про машини та їх власників. База даних за допомогою SQL-сервер. Реалізація запитів, процедур, тригерів і представлення.

    курсовая работа [1,7 M], добавлен 18.06.2012

  • Функції прикладних програм керування контентом. Apache HTTP-сервер та його архітектура. Файл .htacces та фреймворк Bootstrap. Розробка системи управління контенту, її реалізація на сервері Apache. Пояснення принципу роботи CMS та контрольні приклади.

    курсовая работа [1,1 M], добавлен 11.04.2015

  • Автоматизація планування та обліку методичної роботи. Особливовсті веб-орієнтованих інформаціних систем. Логічна модель роботи системи. Розробка структури бази даних та серверної частини. Вибір засобів розробки. Формування інструкції користувача.

    дипломная работа [4,9 M], добавлен 21.06.2014

  • Систематизація знань як основна функція бази даних. Логічне та фізичне проектування бази даних. Створення таблиць у базі даних, визначення основних зв'язків. Інструментальні засоби проектування та створення програмного забезпечення для обробки даних.

    курсовая работа [1,4 M], добавлен 29.04.2010

  • Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.

    отчет по практике [4,3 M], добавлен 28.08.2014

  • Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.

    дипломная работа [3,3 M], добавлен 10.10.2013

  • Розробка бази даних для автоматизації облікової інформації в системі управління базами даних Access з метою полегшення роботи з великими масивами даних, які існують на складах. Обґрунтування вибору системи управління. Алгоритм та лістинг програми.

    курсовая работа [550,9 K], добавлен 04.12.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.