Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В чем же выигрыш от вызова функции
mysql_use_result
mysql_store_result
mysql_data_seek
mysql_row_seek
mysql_row_tell
mysql_num_rows
Вы также увеличьте время ожидания в вашей программе, т.к. запрос каждой строки должен пройти по сети и также должны быть отправлены обратно результаты. Еще одна возможность — разрыв сетевого соединения в середине операции, оставляющий вас с неполным набором данных.
Но ни один из перечисленных недостатков никак не уменьшает достоинств, упомянутых ранее: лучше сбалансированная сетевая загрузка и меньшие непроизводительные потери памяти в случае возможных очень больших наборов данных.
Замена программы select1.c на программу select2.c, использующую метод
mysql_use_result
if (res) {
printf("SELECT error: %sn", mysql_error(&my_connection));
} else {
res_ptr = mysql_use_result(&my_connection);
<i> if (res_ptr) {</i>
<i> while ((sqlrow = mysql_fetch_row(res_ptr))) {</i>
<i> printf("Fetched data...n");</i>
<i> }</i>
if (mysql_errno(&my_connection)) {
printf("Retrieve error: %sn", mysql_error(&my_connection));
}
mysql_free_result(res_ptr);
}
}
Учтите, что вы не можете получить количество строк до тех пор, пока не будет извлечен последний результат. Но проверяя ошибки как можно раньше и чаще, вы облегчите применение функции
mysql_use_result
Зная, как извлекать строки, можно перейти к рассмотрению обработки полученных реальных данных.
MySQL, как большинство баз данных SQL, возвращает два вида данных:
□ данные, извлеченные из таблицы и называемые данными столбцов;
□ данные о данных, так называемые метаданные, например, имена столбцов и их типы.
Сначала сосредоточимся на получении данных, как таковых, в пригодном к использованию виде.
Функция
mysql_field_count
<b>unsigned int mysql_field_count(MYSQL * connection);</b>
Помимо этого вы можете использовать
mysql_field_count
mysql_store_result
mysql_store_result
NULL
mysql_field_count
mysql_field_count
В программах, написанных для более ранних версий MySQL, вы можете встретить функцию
mysql_num_fields
Если оставить в стороне заботы о форматировании, вы уже знаете, как немедленно вывести данные. Добавьте простую функцию
display_row
Обратите внимание на то, что для упрощения примера данные о подключении, результате и строке, полученные из функции
mysql_fetch_row
1. Далее приведена очень простая подпрограмма для вывода данных:
<i>void display_row() {</i>
<i> unsigned int field_count;</i>
<i> field_count = 0;</i>
<i> while (field_count < mysql_field_count(&my_commection)) {</i>
<i> printf("%s ", sqlrow[field_count]);</i>
<i> field_count++;</i>
<i> }</i>
<i> printf("n");</i>
<i>}</i>
2. Вставьте ее в конец файла select2.c и добавьте объявление и вызов функции:
<i>void display_row();</i>
int main(int argc, char *argv[]) {
int res;
mysql_init(&my_connection);
if (mysql_real_connect(&my_connection, "localhost", "rick",
"bar", "rick", 0, NULL, 0)) {
printf("Connection successn");
res = mysql_query(&my_connection,
"SELECT childno, fname, age FROM children WHERE age > 5");
if (res) {
printf("SELECT error: %sn", mysql_error(&my_connection));
} else {
res_ptr = mysql_use_result(&my_connection);
if (res_ptr) {
while ((sqlrow = mysql_fetch_row(res_ptr))) {