Основы программирования в Linux - Мэтью Нейл
В чем же выигрыш от вызова функции
mysql_use_resultmysql_store_resultmysql_data_seekmysql_row_seekmysql_row_tellmysql_num_rowsВы также увеличьте время ожидания в вашей программе, т.к. запрос каждой строки должен пройти по сети и также должны быть отправлены обратно результаты. Еще одна возможность — разрыв сетевого соединения в середине операции, оставляющий вас с неполным набором данных.
Но ни один из перечисленных недостатков никак не уменьшает достоинств, упомянутых ранее: лучше сбалансированная сетевая загрузка и меньшие непроизводительные потери памяти в случае возможных очень больших наборов данных.
Замена программы select1.c на программу select2.c, использующую метод
mysql_use_resultif (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_countmysql_store_resultmysql_store_resultNULLmysql_field_countmysql_field_countВ программах, написанных для более ранних версий MySQL, вы можете встретить функцию
mysql_num_fieldsЕсли оставить в стороне заботы о форматировании, вы уже знаете, как немедленно вывести данные. Добавьте простую функцию
display_rowОбратите внимание на то, что для упрощения примера данные о подключении, результате и строке, полученные из функции
mysql_fetch_row1. Далее приведена очень простая подпрограмма для вывода данных:
<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))) {