insert.setString(1,request.getParameter («CustomerName»));

insert.setString (2,request.getParameter(«CustomerPhone»));

insert.setString(3,request.getParameter («CustomerAddress»));

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

insert.executeUpdate();

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

} catch (SQLException ex) {

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

out.println(“Приносим свои извинения”);

return;

}

//Выводим итоговое сообщение

out.println(“<html>”);

out.println («<head>»);

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

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

out.println («<body>»);

out.println(“<h3>Поздравляем! Регистрация завершена успешно</h3>”);

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

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

}

}

}

Запустив сервлет Input, вы увидите на странице веб-форму (рис. 4.37):

Рис. 4.37. Форма ввода данных

Введите в поля формы какие-либо значения и нажмите кнопку Отправить. Для обработки данных повторно вызовется сервлет Input. На этот раз сервлет получит непустой список параметров, поэтому выполнятся инструкции, следующие после ключевого слова else в листинге 4.19, а именно: создастся объект insert класса PreparedStatement, соответствующий SQL-команде INSERT. Далее с помощью методов setString() в команду будут подставлены введенные вами имя, телефон и адрес, а затем для передачи команды на сервер MySQL вызовется метод executeUpdate(). При успешном выполнении всех этих действий вы увидите на странице соответствующее сообщение (рис. 4.38).

Рис. 4.38. Результат сохранения данных

Итак, вы научились сохранять в базе пользовательские данные с помощью параметризованной SQL-команды.

До этого момента во всех наших сервлетах обработка возможных ошибок при взаимодействии с базой данных сводилась к выводу на экран сообщения об ошибке. В следующем подразделе вы узнаете, какие еще действия можно выполнить при перехвате исключения.

Обработка ошибок

Изучая функции JDBC, вы узнали, что в случае возникновения ошибки все эти функции генерируют исключение SQLException. С помощью методов класса SQLException вы можете получить более подробные сведения об ошибке взаимодействия с базой данных. В частности, метод

public String getMessage()

возвращает описание ошибки, а метод

public int getErrorCode()

возвращает код ошибки. Эту информацию целесообразно отображать на вебстранице только при отладке сервлета; в дальнейшем, при эксплуатации сервлета, лучше записывать детальную информацию об ошибках в файл или отсылать на свой электронный почтовый ящик. В частности, чтобы сохранять сообщения об ошибках в log-файле, добавим в исходный код сервлета вызов метода

public void log(«<Текст сообщения>»)

класса HttpServlet:

try {

//Операции с базой данных

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

} catch (SQLException ex) {

out.println («Ошибка доступа к базе данных.»);

out.println(«Приносим свои извинения»);

//Записываем сообщение об ошибке в log-файл

log(ex.getErrorCode() + « « +ex.getMessage());

return;

}

Например, если модифицировать таким образом сервлет Input (см. листинг 4.19), то в случае отсутствия в базе данных таблицы Customers (Клиенты) в log-файл будет записано следующее сообщение:

28.06.2008 11:15:00 org.apache.catalina.core.ApplicationContext log INFO: Input: 1146 Table 'salesdept.customers' doesn't exist

...

Примечани е

При запуске сервлета в созданной нами среде разработки сервлетов сообщение об ошибке будет записано в файл <Корневая папка Tomcat>logslocalhost.<Текущая дата>.log. При использовании хостинга с поддержкой сервлетов уточните имя и местоположение log-файла у провайдера хостинга.

Итак, вы узнали, каким образом исключение SQLException позволяет организовать обработку ошибок, возникших при обращении к базе данных. В завершение кратко обобщим основные сведения, рассмотренные в разделе 4.3 «Интерфейс с Java».

Итоги

В данном разделе вы научились работать с базой данных MySQL, используя следующие функции JDBC:

• метод getConnection() класса DriverManager для подключения к базе данных, установки кодировки и выбора текущей базы данных;

• методы createStatement() и prepareStatement() класса Connection для создания объектов, отвечающих за выполнение SQL-команды на сервере MySQL;

• методы set<Тип данных>() класса PreparedStatement для подстановки значений в параметризованный запрос;

• методы executeUpdate() классов Statement и PreparedStatement для выполнения SQL-команд изменения данных;

• методы executeQuery() классов Statement и PreparedStatement для выполнения SQL-запросов;

• методы next() и get<Тип данных>() класса ResultSet для получения отдельных значений из результата запроса;

• методы getMessage() и getErrorCode() класса SQLException для обработки ошибок взаимодействия с базой данных.

Разумеется, возможности интерфейса JDBC не исчерпываются перечисленными функциями. Полную информацию о JDBC вы найдете на странице http://java.sun.com/javase/6/docs/technotes/guides/jdbc/.

Подведем теперь итоги главы.

4.4. Резюме

В данной главе вы познакомились с возможностями популярных языков веб-программирования – PHP, Perl и Java – по интеграции с базой данных MySQL. Хотя мы ограничились рассмотрением только самых необходимых функций, позволяющих подключаться к базе данных и выполнять SQL-команды, с помощью этих функций вы можете создавать широкий спектр динамических веб-приложений.

Далее мы рассмотрим следующий важный аспект эксплуатации базы данных MySQL – профилактические действия, направленные на обеспечение безопасности и бесперебойного функционирования сервера.

Глава 5 Администрирование и безопасность

В предыдущих главах вы изучали функциональные возможности СУБД MySQL – те возможности работы с данными, которые необходимы для решения ваших бизнес-задач. В этой главе мы рассмотрим вспомогательные, но не менее важные процессы: управление доступом пользователей к базе данных и предотвращение потерь данных в случае сбоев. Мы расскажем, как выполнять операции администрирования с помощью специальных SQL-команд, утилит командной строки, а также с помощью графической утилиты MySQL Administrator.

В первую очередь речь пойдет о разграничении доступа пользователей MySQL. Контроль действий пользователей включает два этапа:

• когда пользователь пытается подключиться к серверу баз данных, программа MySQL проверяет, разрешено ли ему подключение, то есть проверяет его учетную запись;

• когда пользователь пытается выполнить какую-либо операцию, программа MySQL проверяет, имеет ли пользователь привилегию, разрешающую эту операцию.

Следующий раздел посвящается операциям с учетными записями пользователей MySQL. Систему привилегий доступа мы рассмотрим в разделе 5.2 «Система привилегий доступа».

5.1. Учетные записи пользователей

В этом разделе мы рассмотрим настройку учетных записей. Вы узнаете, как зарегистрировать или удалить пользователя MySQL, как изменить его пароль и как получить информацию о зарегистрированных пользователях.

Общие сведения об учетных записях

Под учетной записью пользователя MySQL подразумевается строка в таблице user (Пользователь) системной базы данных mysql. Первичным ключом в этой таблице служат столбцы Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но

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

0

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

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