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

Створення об’єкту для передачі операторів 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()){ дії; } При цьому курсор почергово проходить всі рядки результуючої таблиці.

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