} 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. Вывод информации на