А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
0-9 A B C D I F G H IJ K L M N O P Q R S TU V WX Y Z #


Чтение книги "MySQL 5.0. Библиотека программиста" (страница 22)

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

   Вы уже знаете, что при подключении к базе данных можно задать режим обработки ошибок. Режим определяется двумя параметрами:
   • PrintError. Если этому параметру присвоено значение 1, то при возникновении ошибки выводится сообщение об ошибке;
   • RaiseError. Если этому параметру присвоено значение 1, то при возникновении ошибки выводится сообщение об ошибке и сценарий завершает работу.
   Чтобы реализовать собственный алгоритм обработки ошибок, отключите системную обработку ошибок, присвоив обоим параметрам значение 0, например:

   my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
   “username”,”userpassword”,
   {PrintError=>0,RaiseError=>0});

   Для получения информации о возникшей ошибке предназначены методы

   errstr()

   и

   err()

   Метод errstr() возвращает описание ошибки, произошедшей при выполнении последней SQL-команды, или значение undef, если команда была выполнена успешно. Метод mysql_errno() возвращает код ошибки, произошедшей при выполнении последней SQL-команды, или undef, если команда была выполнена успешно.
   Значения, возвращаемые методами errstr() и err(), не рекомендуется отображать на веб-странице, чтобы не раскрывать информацию об архитектуре приложения. Вместо этого вы можете записывать сведения об ошибке в файл или отсылать по электронной почте разработчику или администратору приложения.
   Приведу пример обработки возникшей ошибки – запись ошибки в файл:

   my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
   «username»,»userpassword»,
   {PrintError=>0,RaiseError=>0});
   if(!$dbh)
   {
   #Формируем сообщение об ошибке
   my $logmessage = localtime.”
   «.DBI->err().» «.DBI->errstr().»n»;
   #Открываем log-файл
   my $res = open(my $log, «>>», «mysqlerror.log»);
   if(!$res)
   {
   print “Ошибка при открытии журнала”;
   die();
   };
   #Записываем в файл сообщение об ошибке
   print $log $logmessage;
   #Закрываем файл
   $res = close $log;
   if(!$res)
   {
   print “Ошибка при закрытии журнала”;
   die();
   }
   #Выводим сообщение об ошибке на странице
   print “Ошибка доступа к базе данных.
   Приносим свои извинения”;
   #Завершаем работу
   die();
   }

   Если при подключении к базе данных произойдет ошибка, в файл mysqlerror. log, находящийся в папке cgi-bin, будет записано сообщение, содержащее дату и время, номер и описание ошибки. Например, если база данных SalesDept (Отдел продаж) была удалена, в файле появится запись вида Sat Jun 28 11:15:00 2008 1049 Unknown database 'salesdept'.
   Далее вы узнаете о том, каким образом приложение Perl работает с данными, полученными из БД с помощью запроса.

   Выполнение запроса к базе данных

   Для поиска информации в базе данных необходимо последовательно вызвать методы

   prepare(«<Текст запроса>»)

   и

   execute()

   Метод prepare() обеспечивает подготовку запроса для последующего выполнения и возвращает дескриптор команды – указатель на объект, реализующий все операции, связанные с запросом: выполнение запроса, обработку результатов запроса и др. Далее вызывается метод execute() дескриптора команды, который выполняет запрос и возвращает значение TRUE в случае успеха или значение undef в случае ошибки.
   Например, чтобы получить все данные из таблицы Products (Товары), выполните команды

   my $query = $dbh->prepare(«SELECT * FROM Products»);
   $query -> execute();

   В переменной $query хранится дескриптор команды.
...
   Примечание
   Если требуется выполнить динамический запрос, содержащий переменные величины, вы можете воспользоваться привязкой параметров, о которой было сказано в подразделе «Ввод данных в базу». А именно, в тексте команды эти величины нужно заменить символами? а их значения передать в качестве параметров метода execute(). Например, получить список товаров, цена которых не превосходит значения переменной $max_price, можно следующим образом:

   my $query = $dbh->prepare(SELECT * FROM Products
   WHERE price <= ?);
   $query -> execute($max_price);

   Для получения доступа к значениям в результате запроса вы можете использовать метод

   fetchrow_hashref([<Регистр>])

   или

   fetchrow_arrayref()

   Метод fetchrow_hashref() получает очередную строку из результата запроса, преобразует ее в ассоциативный массив (хеш) и возвращает ссылку на этот массив. Вы можете указать в качестве аргумента значение NAME_uc или NAME_lc, чтобы привести имена столбцов к верхнему или, соответственно, нижнему регистру.
   После обработки результатов запроса освободить память, занятую под массив полученных запросом данных, можно с помощью метода

   finish()

   Рассмотрим работу с запросом на примере вывода списка товаров, то есть данных из таблицы Products (Товары). Создайте в папке cgi-bin корневой папки XAMPP файл input.pl, содержащий код, представленный в листинге 4.12.
Листинг 4.12. Получение информации и отображение ее на странице
   #!»C:Program Filesxamppperlbinperl.exe»
   print «Content-type: text/html; charset=windows-1251nn»;
   use DBI;
   #Подсоединяемся к базе данных
   my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
   «username»,»userpassword»);
   if(!$dbh)
   {
   print «Ошибка доступа к базе данных. Приносим свои извинения”;
   die();
   }
   #Устанавливаем кодировку CP-1251
   $dbh->do(«SET NAMES cp1251»);
   #Выполняем запрос к базе данных
   my $query = $dbh->prepare(«SELECT * FROM Products»);
   my $qresult = $query -> execute();
   if(!$qresult)
   {
   print “Ошибка доступа к базе данных. Приносим свои извинения”;
   die();
   }
   #Создаем строку для вывода результатов запроса
   my $pagecontent=””;
   #Для каждой строки из результата запроса
   #записываем данные в хеш и сохраняем ссылку на хеш
   #в переменной $product
   while(my $product = $query -> fetchrow_hashref(«NAME_uc»))
   {
   #Выводим элементы хеша
   #с индексами DESCRIPTION, DETAILS и PRICE
   $pagecontent.=»<tr><td>».$product->Чтение книги "MySQL 5.0. Библиотека программиста" (страница 22).»</td>».
   «<td>».$product->{DETAILS}.»</td>».
   «<td>».$product->{PRICE}.»</td></tr>n»;
   }
   #Освобождаем ресурсы
   $query -> finish();
   #Отсоединяемся от базы данных
   $dbh->disconnect();
   #Выводим полученные данные
   print “
   <html>
   <head>
   <title>Работа с MySQL</title>
   </head>
   <body>
   <!– Выводим заголовок списка товаров –>
   <h1>Список товаров</h1>
   <table>
   <tr>
   <th>Наименование</th>
   <th>Описание</th>
   <th>Цена</th>
   </tr>
   «.$pagecontent.»
   </table>
   </body>
   </html>
   “;

   Открыв в браузере страницу http://localhost/cgi-bin/output.pl, вы увидите список товаров (рис. 4.24).
   Рис. 4.24. Вывод информации на странице

   Отметим, что если в результате запроса присутствуют несколько столбцов с одинаковыми именами (это возможно в случае получения информации из нескольких таблиц), то метод fetchrow_hashref() предоставляет доступ только к последнему из этих столбцов. Кроме того, порядок элементов в хеше может отличаться от порядка столбцов в таблице; в этом легко убедиться, если вывести значения всех полей с помощью цикла foreach:

   while(my $product = $query->fetchrow_hashref(«NAME_uc»))
   {
   print «<p>»
   foreach my $field_name (keys %$product)
   {
   print «$product->{$field_name}t»;
   }
   print “</p>”
   }

   Этих недостатков лишен метод fetchrow_arrayref(), который работает аналогично методу fetchrow_hashref(), но возвращает ссылку на массив с числовыми индексами. При использовании метода fetchrow_arrayref() сценарий для вывода списка товаров будет следующим (листинг 4.13).
Листинг 4.13. Получение информации и отображение ее на странице
   #!»C:Program Filesxamppperlbinperl.exe»
   print «Content-type: text/html; charset=windows-1251nn»;
   use DBI;
   #Подсоединяемся к базе данных
   my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
   «username»,»userpassword»);
   if(!$dbh)
   {
   print «Ошибка доступа к базе данных. Приносим свои извинения”;
   die();
   }
   #Устанавливаем кодировку CP-1251
   $dbh->do(«SET NAMES cp1251»);
   #Выполняем запрос к базе данных
   my $query = $dbh->prepare(«SELECT * FROM Products»);
   my $qresult = $query -> execute();
   if(!$qresult)
   {
   print “Ошибка доступа к базе данных. Приносим свои извинения”;
   die();
   }
   #Создаем строку для вывода результатов запроса
   my $pagecontent=””;
   #Для каждой строки из результата запроса
   #записываем данные в массив и сохраняем ссылку на массив
   #в переменной $product
   while(my $product = $query -> fetchrow_arrayref())
   {
   #Выводим элементы массива с номерами 1, 2, 3
   $pagecontent.=»<tr><td>».$product->[1].»</td>».
   «<td>».$product->[2].»</td>».
   «<td>».$product->[3].»</td></tr>n»;
   }
   #Освобождаем ресурсы
   $query -> finish();
   #Отсоединяемся от базы данных
   $dbh->disconnect();
   #Выводим полученные данные
   print “
   <html>
   <head>
   <title>Работа с MySQL</title>
   </head>
   <body>
   <!– Выводим заголовок списка товаров –>
   <h1>Список товаров</h1>
   <table>
   <tr>
   <th>Наименование</th>
   <th>Описание</th>
   <th>Цена</th>
   </tr>
   «.$pagecontent.»
   </table>
   </body>
   </html>
   “;

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

   Итоги

   В данном разделе вы изучили функции языка Perl, позволяющие выполнять все необходимые операции с базой данных MySQL:
   • подключение к базе данных и отключение от нее;
   • выполнение SQL-команд как получающих информацию из базы данных (методы prepare() и execute()), так и не получающих ее (метод do());
   • обработка ошибок.
   Ознакомиться с полным списком функций модуля Perl DBI вы можете, перейдя по странице http://dbi.perl.org/ на ссылку Manual pages.
   В следующем разделе вы узнаете о том, как взаимодействуют с базой данных веб-приложения на языке Java.

   4.3. Интерфейс с Java

   В этом разделе рассмотрим разработку Java-сервлетов, использующих базу данных MySQL для хранения и поиска информации. Вы узнаете, как создать и настроить среду разработки сервлетов, а также научитесь использовать для взаимодействия с MySQL функции JDBC (Java Database Connectivity – интерфейс доступа к базам данных из приложений Java).
   В первую очередь вы узнаете, какое программное обеспечение потребуется для создания сервлетов.

   Среда разработки сервлетов

   Для создания сервлетов необходимы следующие программы:
   • Java Development Kit (JDK) – пакет поддержки разработок в среде Java;
   • дополнительная библиотека servlet-api.jar (или servlet.jar), необходимая для компиляции сервлетов, но не входящая в состав Java Development Kit;
   • контейнер сервлетов – программа, обеспечивающая загрузку и выполнение сервлетов;
   • программа, выполняющая функции веб-сервера.
   Широко известным контейнером сервлетов является Tomcat – свободно распространяемая программа с открытым кодом. Tomcat может выполнять функции веб-сервера либо использоваться совместно с веб-сервером Apache. В состав Tomcat входит и библиотека servlet-api.jar.
   Кроме того, чтобы сервлеты могли взаимодействовать с базой данных, необходимо установить и подключить JDBC-драйвер. В качестве такого драйвера был выбран MySQL Connector/J.
   Итак, наша среда разработки будет состоять из Java Development Kit, Tomcat и MySQL Connector/J. В следующем подразделе вы узнаете, как установить и настроить эти компоненты.
Чтение онлайн



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 31

Навигация по сайту


Читательские рекомендации

Информация