使用mysql C语言API编写程序—MYSQL数据库查询操作

//MYSQL_RES保存查询结构

MYSQL_RES* result_ = NULL;

int error_code = 0;                         //保存错误码

char error_info[1024] = '\0';               //保存错误信息

 

 

 

//mysql数据库进行查询操作:

 

char query_sql[1024] = "select * from db_name.table_name";          //构建查询sql语句

 

if(result_ != NULL)                        //防止之前已经被使用过(所有的使用,在使用前都要判空)

{

      mysql_free_result(result_);

      result_ = NULL;

}

 

if(link_ == NULL)                          //防止没有链接

{

         //重连,按照建立mysql数据库链接的方法进行建立,前面的blog中有讲到

}

 

 

 

//执行sql查询

if(mysql_query(link_,query_sql) != 0)

{

         //查询失败

         error_code = mysql_errno(link_);                      //获取错误码

         strncpy(error_info,mysql_error(link_),1024);          //获取错误信息

 

         if((error_code == 2013) || (error_code == 2006))      //2006 mysql服务器不可用,2013查询过程中,丢失链接

         {

             //重链,按照建立mysql数据库链接的方法进行建立

             if(//重链失败)

             {

                   return false;

             }

            //重链成功,再次查询

            if(mysql_query(link_,query_sql) != 0)

            {

                 //再次查询失败

                 error_code = mysql_errno(link_);

                 strncpy(error_info,mysql_error(link_),1024);

                 //返回错误

                 return false;

            }

 

            error_code = 0;//查询成功了。

         }

}

else

{

      //查询成功

}

 

 

 

//查询成功,保存查询结果

result_ = mysql_store_result(link_);

if(result_ == NULL)

{

     error_code = mysql_errno(link_);                    //获取错误码

     strncpy(error_info,mysql_error(link_),1024);           //获取错误信息

 

 

     //返回错误                                      

     return false;

}

 

 

 

//获取查询结果的行数(记录数)

return mysql_num_rows(result_);

 

 

 

//获取查询结果的字段数

 

return mysql_num_fields(result_);

 

 

//获取查询结果的各个字段的字段名称

MYSQL_FIELD  *fields;                              //保存字段名字信息

unsing int  num_fields;

unsigned int  i;

num_fields = mysql_num_fields(result);             //获取查询结果中,字段的个数

 

fields = mysql_fetch_fields(result);               //获取查询结果中,各个字段的名字

for(i = 0; i < num_fields;i++)

{

       printf("field  %u  is  %s\n",i,fields[i].name);

}

 

 

//获取查询出来的结果,即遍历查询到的每一行记录

MYSQL_ROW  row;                                    //保存行记录信息

unsigned  int  num_fields;

unsigned  int  i;

 

num_fields  =  mysql_num_fields(result_);

while((row = mysql_fetch_row(result_)))            //遍历查询结果中的各行记录

{

      unsigned long *lengths = NULL;

      lengths = mysql_fetch_lengths(result_);     //获取每一个记录行中,每一个字段的长度,在lengths数组中。

      for( i = 0; i < num_fields; i++)

      {

            printf("数据长度%u \t  数据内容%s",lengths[i],row[i]?row[i]:"NULL");

      }

      printf("\n");

}

 

 

 

//释放资源,断开链接

if(result_ != NULL)

{

     mysql_free_result(result_);

     result_  = NULL;

}

if(link_ != NULL)

{

     mysql_close(link_);

     link_ = NULL;

}

原文:http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520113287814447/

原文地址:https://www.cnblogs.com/ymy124/p/2457730.html