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

Шрифт
Фон

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

Connection dbh =

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

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

//Создаем объект для параметризованной SQL-команды

String insertTemplate =

"INSERT INTO Customers (name,phone,address)VALUES (?,?,?)";

PreparedStatement insert = dbh.prepareStatement(insertTemplate);

//Присваиваем параметрам значения, полученные из формы

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):

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

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

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

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

Рис. 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 "Система привилегий доступа".

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

0
Шрифт
Фон

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

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

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

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