MySQL 5.0. Библиотека программиста
Шрифт:
Введите в поля формы какие-либо значения и нажмите кнопку Отправить. Для обработки данных повторно вызовется сервлет Input. На этот раз сервлет получит непустой список параметров, поэтому выполнятся инструкции, следующие после ключевого слова else в листинге 4.19, а именно: создастся объект insert класса PreparedStatement, соответствующий SQL-команде INSERT. Далее с помощью методов setString в команду будут подставлены введенные вами имя, телефон и адрес, а затем для передачи команды на сервер MySQL вызовется метод executeUpdate. При успешном выполнении всех этих действий вы увидите на странице соответствующее сообщение (рис. 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>\logs\localhost.<Текущая дата>.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 идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого подключается пользователь. Это означает, что вы не просто можете ограничить круг хостов, с которых разрешено подключаться данному пользователю; вы можете, например, создать разные учетные записи (а следовательно, назначить разные привилегии доступа) для пользователя anna, подключающегося с компьютера localhost, и для пользователя anna, подключающегося с компьютера somedomain.com.