} catch (SQLException ex) {

out.println(“Ошибка доступа к базе данных. Приносим свои извинения”);

return;

}

out.println («Подключение выполнено успешно»);

}

}

После размещения и регистрации сервлета в контейнере наберем его адрес в адресной строке браузера. При успешном подключении к базе данных на вебстранице появится соответствующее сообщение (рис. 4.35).

Рис. 4.35. Результат подключения к базе данных

После подключения к серверу MySQL можно переходить к работе с данными. В следующем подразделе мы рассмотрим выполнение простых SQL-команд.

Выполнение простых SQL-команд. Обработка результатов запроса

Для выполнения SQL-команд, не имеющих подстановочных параметров, предназначен класс Statement. Объект класса Statement создается с помощью метода

Statement createStatement() throws SQLException

класса Connection. Например, вызов метода

Statement query = dbh.createStatement();

создает объект query, соответствующий SQL-команде. Если SQL-команда не предполагает получение данных из базы (такими командами являются, например, команды INSERT, UPDATE, DELETE), то для ее выполнения используется метод

int executeUpdate («<Текст команды>») throws SQLException

класса Statement. Метод executeUpdate() возвращает количество строк, с которыми была выполнена операция. Для выполнения SQL-запроса используется метод

ResultSet executeQuery(«<Текст запроса>») throws SQLException

класса Statement. Метод executeQuery() возвращает объект класса ResultSet, содержащий набор полученных запросом данных. Важным элементом результирующего набора является курсор – указатель на текущую строку.

Для извлечения данных из результирующего набора нам потребуются следующие методы класса ResultSet.

• boolean next() throws SQLException

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

• Методы вида get^rn данных>(<Имя или номер столбца>) возвращают значение, находящееся в текущей строке в указанном столбце. В зависимости от типа данных столбца вы можете использовать следующие функции:

• для числовых столбцов:

boolean getBoolean (<Имя или номер столбца>)

throws SQLException

int getInt(<Имя или номер столбца>)

throws SQLException

long getLong(<Имя или номер столбца>)

throws SQLException

float getFloat(<Имя или номер столбца>)

throws SQLException

double getDouble (<Имя или номер столбца>)

throws SQLException

BigDecimal getBigDecimal(<Имя или номер столбца>)

throws SQLException

• для столбцов с типом даты и/или времени:

Date getDate(<Имя или номер столбца>)

throws SQLException

Timestamp getTimestamp (<Имя или номер столбца>)

throws SQLException

Time getTime(<Имя или номер столбца>)

throws SQLException

• для символьных типов данных:

String getString(<Имя или номер столбца>)

throws SQLException

byte[] getBytes(<Имя или номер столбца>)

throws SQLException

Рассмотрим сервлет, который выполняет простой запрос для получения данных из таблицы Products (Товары) и выводит сведения о товарах на веб-странице (листинг 4.18). Листинг 4.18. Получение информации и отображение ее на странице

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

public class Output extends HttpServlet {

public void service(HttpServletRequest request,

HttpServletResponse response) throws IOException, ServletException {

response.setContentType(«text/html;charset=windows-1251»);

PrintWriter out = response.getWriter();

//Создаем строку для вывода результата запроса

String pagecontent = «»;

try {

//Подсоединяемся к базе данных

Connection dbh =

DriverManager.getConnection(«jdbc:mysql://localhost/SalesDept»

+»? user=username&password=userpassword&characterEncoding=cp1251»);

//Создаем объект для SQL-команд

Statement query = dbh.createStatement();

//Выполняем запрос к базе данных

ResultSet qresult = query.executeQuery(«SELECT * FROM Products»);

//Для каждой строки в результирующем наборе выводим значения столбцов

//description (наименование), details (описание) и price (цена)

while (qresult.next()) {

pagecontent +=

«<tr><td>» + qresult.getString(«description») + «</td>» +

«<td>» + qresult.getString(«details») + «</td>» +

«<td>» + qresult.getBigDecimal («price») + «</td></tr> »;

}

//Обрабатываем исключение

} catch (SQLException ex) {

out.println(“Ошибка доступа к базе данных. Приносим свои извинения”);

return;

}

//Выводим полученные данные

out.println(«<html>»);

out.println («<head>»);

out.println(«<title>Работа с MySQL</title>»);

out.println(«</head>»);

out.println («<body>»);

out.println(“<!– Выводим заголовок списка товаров – >”);

out.println(“<h1>Список товаров</h1>”);

out.println(«<table>»);

out.println («<tr>»);

out.println(«<th>Наименование</th>»);

out.println(«<th>Описание</th>»);

out.println(«<th>Цена</th>»);

out.println(«</tr>»);

out.println (pagecontent);

out.println(«</table>»);

out.println(«</body>»);

out.println (“</html>”);

}

}

В этом примере вначале выполняется подключение к базе данных, далее создается объект query класса Statement, затем метод executeQuery() этого объекта выполняет запрос к базе данных. Результат запроса записывается в объект qresult класса ResultSet. Затем последовательно рассматриваются строки объекта qresult и выводятся значения столбцов description, details и price.

В результате запуска сервлета Output вы увидите на веб-странице список товаров (рис. 4.36).

Рис. 4.36. Вывод информации на

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату