Основы программирования в Linux - Мэтью Нейл
0/0

Основы программирования в Linux - Мэтью Нейл

Уважаемые читатели!
Тут можно читать бесплатно Основы программирования в Linux - Мэтью Нейл. Жанр: Интернет. Так же Вы можете читать полную версию (весь текст) онлайн книги без регистрации и SMS на сайте Knigi-online.info (книги онлайн) или прочесть краткое содержание, описание, предисловие (аннотацию) от автора и ознакомиться с отзывами (комментариями) о произведении.
Описание онлайн-книги Основы программирования в Linux - Мэтью Нейл:
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов
Читем онлайн Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 144 145 146 147 148 149 150 151 152 ... 324

Когда вы запустите программу, должно появиться сообщение об успешном подключении:

$ <b>./connect1</b>

Connection success $

В главе 9 мы покажем, как создать make-файл и автоматизировать процесс подключения.

Как видите, подключиться к базе данных MySQL очень легко.

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

Прежде чем мы перейдем к более сложным программам, полезно взглянуть на то, как MySQL обрабатывает ошибки. СУРБД MySQL использует ряд возвращаемых числовых кодов, предоставляемых дескриптором подключения. К двум обязательным подпрограммам относятся следующие:

<b>unsigned int mysql_errno(MYSQL *connection);</b>

и

<b>char *mysql_error(MYSQL *connection);</b>

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

Возвращаемое значение — в действительности код ошибки, коды ошибок определены в файле include с именем errmsg.h или в файле mysqld_error.h. Оба файла можно найти в каталоге MySQL с именем include. Первый сообщает об ошибках клиентской стороны, а второй — об ошибках сервера.

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

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

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

#include &lt;stdlib.h&gt;

#include &lt;stdio.h&gt;

#include &quot;mysql.h&quot;

int main(int argc, char *argv[]) {

<i> MYSQL my_connection;</i>

<i> mysql_init(&amp;my_connection);</i>

<i> if (mysql_real_connect(&amp;my_connection, &quot;localhost&quot;, &quot;rick&quot;,</i>

<i>  &quot;I do not know&quot;, &quot;foo&quot;, 0, NULL, 0)) {</i>

  printf(&quot;Connection successn&quot;);

  mysql_close(&amp;my_connection);

 } else {

  fprintf(stderr, &quot;Connection failedn&quot;);

<i>  if (mysql_errno(&amp;my_connection)) {</i>

<i>   fprintf(stderr, &quot;Connection error %d: %sn&quot;,</i>

<i>    mysql_errno(&amp;my_connection), mysql_error(&amp;my_connection));</i>

<i>  }</i>

 }

 return EXIT_SUCCESS;

}

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

$ <b>./connect2</b>

Connection failed

Connection error 1045: Access denied for user: '[email protected]' (Using password: YES)

$

Выполнение SQL-операторов

Теперь, когда вы можете подключаться к вашей базе данных и корректно обрабатывать ошибки, самое время дать вашей программе реальную работу. У основной функции API, предназначенной для выполнения операторов языка SQL, подходящее имя.

<b>int mysql_query(MYSQL *connection, const char *query);</b>

He слишком сложная? Эта подпрограмма принимает указатель на дескриптор подключения и несколько, хочется надеяться, корректных SQL-операторов в виде текстовой строки (без завершения каждого из них точкой с запятой, как в мониторе mysql). В случае удачного завершения возвращается ноль. Вторую подпрограмму mysql_real_query можно применять при запросе двоичных данных, но в этой главе мы используем только подпрограмму mysql_query.

SQL-операторы, не возвращающие данных

Для простоты начнем с рассмотрения нескольких SQL-операторов, которые не возвращают данные: UPDATE, DELETE и INSERT.

Еще одна важная функция, которую мы рассмотрим, проверяет количество строк, затронутых запросом:

<b>my_ulonglong mysql_affected_rows(MYSQL *connection);</b>

Первое, что вы, вероятно, заметили в этой функции, — очень необычный тип возвращаемых данных. Из соображений переносимости применяется беззнаковый (unsigned) тип. Когда используется функция printf, рекомендуется приводить его к типу unsigned long (длинное беззнаковое) со спецификатором формата %lu. Эта функция возвращает количество строк, измененных предварительно выполненным запросом UPDATE, INSERT или DELETE. Возвращаемое значение, используемое в MySQL, может вас, озадачить, если у вас есть опыт работы с другими базами данных SQL. СУРБД MySQL возвращает количество строк, действительно измененных обновлением, в то время как многие другие СУБД будут считать запись измененной просто потому, что она соответствует одному из условий WHERE.

1 ... 144 145 146 147 148 149 150 151 152 ... 324
На этой странице вы можете бесплатно читать книгу Основы программирования в Linux - Мэтью Нейл бесплатно.

Оставить комментарий

Рейтинговые книги