Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection_servlets.doc
Скачиваний:
30
Добавлен:
23.02.2016
Размер:
356.35 Кб
Скачать

Пакетне виконання sql запитів

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

Statement st = con.createStatement();

st.addBatch("INSERT INTO CUSTOMER VALUES (10, 'John', 1000)");

st.addBatch("UPDATE CUSTOMER SET SALARY = 250 WHERE ID = 1");

st.addBatch("UPDATE CUSTOMER SET SALARY = 350 WHERE ID = 2");

int[] results = st.executeBatch();

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

  • Більше або рівне 0 – операція виконана успішно і кількість змінених при операції запитів рівне заданому в масиві

  • -2 - виконання успішне, але кількість запитів, які були змінені при виконанні запиту невідомо (приклад виклик якоїсь внутрішньої процедури)

  • -3 - виконання заданої команди неуспішне. Проте це не зупиняє подальшого виконання команд пакету.

Виконання внутрішніх процедур

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

Для виклику внутрішніх процедур використовується підінтерфейс PreparedStatement — CallableStatement. Приклад виклику внутрішньої процедури getSumSalary(int k):

CallableStatement cst = con.callableStatement({? = call getSumSalary(?)}");

cst.setInt(2, 10);

cst.registerOutParameter(1, java.sql.Types.DOUBLE);

cst.execute();

System.out.println("Sum salary for id < 10 = " + cst.getDouble(1));

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

{begin :1 = getSumSalary(:2); end;}

Інтегрування сервлетів і jsp-сторінок Перенаправлення запитів із сервлетів

Перенаправлення запитів сервлетами та включення зовнішнього вмісту забезпечується об’єктом класу RequestDispatcher. В сервлетах для отримання посилання на цей об’єкт викликається метод getRequestDispatcher об’єкту класу ServletContext, задаючи URL відносно кореневого каталогу сервера.

Після отримання RequestDispatcher використовують методи forward для повної передачі керування ресурсу, асоційованому з відповідним URL, та include для виводу вмісту, відповідного цьому URL. В обох випадках у якості параметрів передаються об’єкти класів HttpServletRequest і HttpServletResponse. Приклад:

String url = “/presentations/presentation1.jsp”;

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);

dispatcher.forward(request, response);

Передача інформації на сторінки призначення

Існує два місця, в яких сервлет може зберігати дані, що необхідно передати JSP-сторінкам: в об’єкті класу HttpServletRequest і в якості bean-компонента в місці, визначеному атрибутом scope директиви jsp:useBean. Наприклад, для того, щоб зробити bean-компонент доступним для всіх сервлетів і JSP-сторінок Web-додатку, вихідний сервлет повинен виконати наступні дії:

Type1 value1 = computeValueFromRequest(request);

getServletContext().setAttribute(“key1”, value1);

Сторінка призначення отримає збережені дані, використовуючи jsp:useBean:

<jsp:useBean id=”key1” class=”Type1” scope=”application” />

Специфікація сервлетів 2.2 пропонує ще один спосіб передчі даних на всі сторінки при використанні GET-запитів: треба додати дані запиту до URL. Наприклад:

String address = “/path/resource.jsp?newParam=value”;

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);

dispatcher.forward(request, response);

Використання цього методу приводить до появи додаткового параметру запиту newParam(із значенням value), який додається до вже існуючих параметрів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]