Виктор Гольцман - MySQL 5.0. Библиотека программиста стр 44.

Шрифт
Фон

Виктор Гольцман - MySQL 5.0. Библиотека программиста

Рис. 4.33. Стартовая страница Tomcat

9. Чтобы запустить сервлет, наберите в адресной строке браузера его адрес, который вы задали в файле web.xml: http://localhost:8080/servlet/test. Вы увидите результат выполнения сервлета: текст "Мой первый сервлет" (рис. 4.34).

Виктор Гольцман - MySQL 5.0. Библиотека программиста

Рис. 4.34. Результат выполнения сервлета

Итак, вы научились создавать собственные сервлеты и запускать их. Отмечу, что при изменении ранее созданного сервлета его необходимо перекомпилировать (см. пп. 5–6), а затем перезапустить Tomcat, используя файлы shutdown.bat и startup.bat в папке bin корневой папки Tomcat.

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

Подключение к базе данных

В данном разделе мы рассмотрим простой сервлет, который подключается к базе данных и выводит диагностическое сообщение. Чтобы создать такой сервлет, необходимо импортировать пакеты java.sql.*.

Соединение с базой данных описывается объектом класса Connection. Для создания такого объекта предназначен метод

public static Connection getConnection("jdbc:mysql://<Имя

хоста>[:<Имя порта>]/<Имя базы данных>[<Параметры>]")

throws SQLException

класса DriverManager. Параметры соединения задаются в формате

?<Имя параметра>=<Значение>&<Имя параметра>=<Значение>…

Важнейшими параметрами соединения являются user (имя пользователя), password (пароль) и characterEncoding (кодировка).

Если при подключении к базе данных произошла ошибка, метод getConnection() сгенерирует исключение SQLException, о котором подробно будет рассказано в подразделе "Обработка ошибок".

Например, вызов метода

Connection dbh =

DriverManager.getConnection("jdbc:mysql://localhost/SalesDept"

+ "?user=username"

+ "&password=userpassword"

+ "&characterEncoding=cp1251");

осуществляет подключение к серверу MySQL, работающему на локальном компьютере, используя имя пользователя username и пароль userpassword, устанавливает для взаимодействия с сервером кодировку CP-1251 и выбирает базу данных SalesDept (Отдел продаж) в качестве текущей. Созданному соединению соответствует объект dbh класса Connection.

...

Совет

В целях защиты от несанкционированного доступа рекомендуется подключаться к базе данных не от имени пользователя root, а от имени специально созданного пользователя с минимально необходимыми правами доступа. О регистрации пользователей и настройке прав читайте в главе 4.

Создайте теперь сервлет Connect с исходным кодом, представленным в листинге 4.17.

Листинг 4.17.

Подключение к базе данных

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

public class Connect extends HttpServlet {

public void service(HttpServletRequest request,

HttpServletResponse response) throws IOException, ServletException {

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

PrintWriter out = response.getWriter();

try {

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

Connection dbh =

DriverManager.getConnection("jdbc:mysql://localhost/SalesDept"

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

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

} catch (SQLException ex) {

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

return;

}

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

}

}

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

Виктор Гольцман - MySQL 5.0. Библиотека программиста

Рис. 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 (цена)

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub