打印本文 打印本文 关闭窗口 关闭窗口
在MySQL数据库中使用C执行SQL语句 (5)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数731  更新时间:2009/4/22 20:44:53  文章录入:mintao  责任编辑:mintao

这个函数返回一个偏移值,它表示结果集中的当前位置。它不是行号,不能将它用于mysql_data_seek。但是,可将它用于:

MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);


它移动结果集中的当前位置,并返回以前的位置。

有时,这一对函数对于在结果集中的已知点之间跳转很有用。请注意,不要将row tell和row seek使用的偏移值与data_seek使用的行号混淆。这些是不可交换的,结果将是您所希望看到的。

void mysql_free_result(MYSQL_RES *result);


完成结果集时, 必须总是调用这个函数,以允许MySQL库整理分配给它的对象。

 检索数据

现在开始编写从数据库中检索数据的第一个程序。我们将选择所有年龄大于5的行的内容。不幸的是我们还不知道如何处理这个数据,所以我们能做的只有循环检索它。这便是 select1.c:

      #include 

#include

#include "mysql.h"

MYSQL my_connection;

MYSQL_RES *res_ptr; MYSQL_ROW sqlrow;

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 success\n");

res = mysql_query(&my_connection, "SELECT childno,

fname, age FROM children WHERE age > 5");

if (res) {

printf("SELECT error: %s\n", mysql_error(&my_connection));

} else { res_ptr = mysql_store_result(&my_connection);

if (res_ptr) {

printf("Retrieved %luows\n",(unsignedlong)mysql_num_rows(res_ptr));

while ((sqlrow = mysql_fetch_row(res_ptr)))

{ printf("Fetched data...\n");

} if (mysql_errno(&my_connection))

{ fprintf(stderr,

"Retrive error: s\n",mysql_error

&my_connection)); }

} mysql_free_result(res_ptr);

} mysql_close(&my_connection);

} else { fprintf(stderr, "Connection failed\n");

if (mysql_errno(&my_connection))

{ fprintf(stderr, "Connection error %d: %s\n",

mysql_errno(&my_connection),mysql_error(&my_connection));

} } return EXIT_SUCCESS; }



检索结果集并循环通过已检索的数据的重要部分都已突出显示。

一次检索一行数据

要按需要逐行检索数据,而不是立即获取全部数据并将它存储在客户机中,可以将mysql_store_result调用替换成 mysql_use_result:
MYSQL_RES *mysql_use_result(MYSQL *connection);


这个函数还取得一个连接对象并返回结果结合指针,或者出错时返回NULL。与mysql_store_result相似,它返回指向结果集对象的指针;关键的不同点在于返回时,实际上没有将任何数据检索到结果集,只是初始化结果集以准备好检索数据。

打印本文 打印本文 关闭窗口 关闭窗口