网上的资料里说明的是,mysql_store_result()是把查询全部做完,然后一次性将查询结果返回给连接的客户端,而mysql_use_result()是逐条进行查询,逐条将结果返回给客户端,直到结果全部返回完毕。所以对于查询的数据量(数据记录树多,每条记录的数据也很大)特别大的情形时,如果运用mysql_store_result(),会因为执行查询需要消耗很长时间而导致查询“假死”。这时运用mysql_use_result()是个很好的选择。以下是mysql_use_result()的用法实例。
#include<iostream>
#include<WinSock2.h>
#include"mysql.h"
using namespace std;
int main()
{
MYSQL* mysql;
MYSQL_RES* res;
MYSQL_ROW row;
char* queryCmd = "select * from inforoll";
int t,r,c;
mysql=mysql_init(0);
if(!(mysql_real_connect(mysql,"localhost","root","1234","roll6",3306,NULL,0)))
{
printf("connect database roll6 error:%s\n",mysql_error(mysql));
}
else
printf("connected...\n");
t = mysql_query(mysql,queryCmd);
if(t)
{
printf("make query error: %s\n",mysql_error(mysql));
}
else
{
printf("query made...\n");
res = mysql_use_result(mysql);
if(res)
{
//int j = mysql_num_rows(res);如果这样写就只能查询出一行结果
//for(r=0;r<=mysql_num_rows(res);++r)
while(row = mysql_fetch_row(res))
{
//row = mysql_fetch_row(res);
if(row==NULL)
break;
for(t=0;t<mysql_num_fields(res);++t)
printf("%s ",row[t]);
printf("\n");
}
}
mysql_free_result(res);
}
mysql_close(mysql);
cout<<"Done"<<endl;
return 0;
}