- •Основні відомості про сервлети і JavaServer Pages
- •Базова структура сервлетів
- •Життєвий цикл сервлета
- •Метод init
- •Метод service
- •Інтерфейс SingleThreadModel
- •Метод destroy
- •Обробка клієнтських запитів
- •Заголовки http-запиту
- •Коди станів http
- •Заголовки http-відповіді
- •Обробка cookies
- •Атрибути cookie
- •Відслідкування сеансу
- •Отримання інформації про сеанс
- •Перегляд інформації про сеанс
- •Кодування адрес url, надісланих клієнту
- •Елементи сценарію jsp
- •Вирази jsp
- •Скриплети jsp
- •Оголошення jsp
- •Інші наперед визначенізмінні
- •Директива сторінки jsp
- •Включення файлів і аплетів у документи jsp
- •Використання JavaBeans з jsp
- •Основи використання bean-компонентів
- •Доступ до властивостей bean-компонентів
- •Сумісне використання bean-компонентів
- •Робота з базами даних
- •Завантаження тареєстрація драйвера
- •Визначення url для встановлення з’єднання
- •Встановлення з’єднання
- •Створення об’єкту для передачі операторів sql
- •Формування запиту для виконання
- •Виконання запиту
- •Обробка результатів
- •Завершення з’єднання
- •Попередньо відкомпільовані (підготовлені) запити
- •Пакетне виконання sql запитів
- •Виконання внутрішніх процедур
- •Інтегрування сервлетів і jsp-сторінок Перенаправлення запитів із сервлетів
- •Передача інформації на сторінки призначення
- •Перенаправлення запитів з jsp-сторінок
- •Використання аплетів у якості клієнтських інтерфейсів сервлетів
Створення об’єкту для передачі операторів sql
Після того, як ми отримали об’єкт класу Connection, нам необхідно творити Statement, який використовується для пересилання запитів і команд до БД:
Statement statement = c.createStatement();
Формування запиту для виконання
На даному етапі все просто - Вам необхідно сформувати звичайну SQL команду, наприклад:
String str="select * from Mytable";
String str="insert into Mytable (name,cnt) values ('"+name+"',"+cnt+"')";
Виконання запиту
Для виконання запиту ми повинні у екземпляра об’єкта класа Connection одержати Statement і викликати один з його методів залежно від типу запиту:
public int executeUpdate(String sql) throws SQLException
Застосовується для SQL команд INSERT, UPDATE або DELETE. Повертає к-ть рядків над якими виконалася операція.
public ResultSet executeQuery(String sql) throws SQLException
Застосовується для SQL команди SELECT. Повертає ResultSet з якого можна витягнути інформація про шапку таблиці (ResultSetMetaData) і самі значення. Як це робиться буде показаний нижче в прикладі.
public boolean execute(String sql) throws SQLException
Даний метод повертає true/false - выполнился/не виконався запит. Застосовується в тих випадках коли SQL запит повертає декілька ResultSet'ів. Для їх отримання використовуйте getMoreResults().
Приклад:
String str="SELECT * FROM RASHOD WHERE USER_ID="+user;
Statement statement = c.createStatement(); // створюємо оператор
ResultSet rs = statement.executeQuery(str); // виконуємо запит
ResultSetMetaData md = rs.getMetaData(); //для отримання заголовку таблиці
УВАГА! Застосовуйте executeUpdate/executeQuery/execute тоді коли вони доречні - не викликайте executeQuery для INSERT'а !!! Серед інших методів класу Statement присутні execute (виконати довільну команду) і setQueryTimeout (задати максимальний час очікування результатів).
Обробка результатів
Найпростішій метод обробки результатів – їх порядкова обробка методом next класу ResultSet. Цей метод дозволяє кожного разу звертатися до наступного рядка таблиці. Для отримання значення конкретного поля використовують методи getXxx(Xxx–відповідний тип даних). У якості параметра до них передається номер або назва поля.
int cnt= md.getColumnCount(); // одержуємо к-ть колонок (1..cnt)
int row=0;
while(rs.next()) //повертає true якщо є наступний рядок
{
row++;
System.out.println("Row "+row); // вивід номера рядка в базі
for(int i = 1; i <= cnt; i++)
{ String name=md.getColumnName(i); // получаємо ім'я колонки
String val=rs.getString(i); // одержуємо значення
System.out.println(name+"="+val); // виводимо ім'я і значення поля
}
}
Під час виконання запиту необхідно пам’ятати про так званий курсор в таблиці результатів. Він використовується для отримання даних певного рядка таблиці. Увага!!! Після виконання запиту він стоїть перед першим рядком таблиці!!! Тому необхідно виконати дію rs.next(),щоб попробувати доступитися до даних.
В основному для цього доступу використовують цикл while(rs.next()){ дії; } При цьому курсор почергово проходить всі рядки результуючої таблиці.