MySQL连接数据库:C API代码, Linux,Windows

来源:互联网 发布:vb 多线程实例代码 编辑:程序博客网 时间:2024/06/11 01:30

Linux

一、准备

        yum install -y mysql.x86_64 mysql-devel.x86_64

二、代码

2.1 说明

        mysql_num_rows()获取查询结果的行数。

        如果采用了mysql_store_result()获取结果集,可以立刻调用mysql_num_rows()。

        如果采用了mysql_use_result()获取结果集,调用mysql_num_rows()返回不正确的结果,需要在检索完所有的结果集后再调用。

2.2 代码

#include <stdio.h>#include <stdlib.h>#include <mysql.h>int main(int argc, char* argv[]){        //        MYSQL* conn = mysql_init(NULL);        //        if (!mysql_real_connect(conn, "localhost", "root", "love", "inerdns", 0, NULL, 0))        {                printf("mysql_real_connect() error: %s\n", mysql_error(conn));                return 1;        }        //        if (mysql_query(conn, "select * from probe_result"))        {                printf("mysql_query() error: %s\n", mysql_error(conn));                return 2;        }        //        MYSQL_RES* res = mysql_use_result(conn);        //MYSQL_RES* res = mysql_store_result(conn);        //        unsigned long num_rows = mysql_num_rows(res);        unsigned int num_fields = mysql_num_fields(res);        printf("num_rows:%d, num_fields:%d\n", num_rows, num_fields);        //        MYSQL_ROW row;        while ( (row = mysql_fetch_row(res)) != NULL)        {                int i;                for (i=0; i<num_fields; i++)                        printf("%s ", row[i]);                printf("\n");        }        //        num_rows = mysql_num_rows(res);        printf("num_rows:%d, num_fields:%d\n", num_rows, num_fields);        //        mysql_free_result(res);        //        mysql_close(conn);        return 0;}

三、编译

        gcc $(mysql_config --cflags) test.c -o test $(mysql_config --libs)

四、运行结果



Windows下

一、准备

        mysql: ZIP下载、安装、启动、使用、卸载:http://blog.csdn.net/guowenyan001/article/details/9665803

二、代码

2.1 概述

上面Linux的代码,在Windows下完全可以运行,需要修改以下几点:

        1. 包含mysql的include和lib路径。

        2. #pragma comment(lib, "libmysql.lib")。

        3. 包含文件#include <winsock.h>。

        4. 设置libmysql.dll(3种方法:放到VS的Debug目录下,或放到C:\Windows\System32,或设置环境变量Path并重启VS)。

mysql_fetch_field_direct() 将给定结果集某列的字段编号。

2.2 代码

#include <stdio.h>  #include <stdlib.h>    #include <winsock.h>#include <mysql.h>  #pragma comment(lib, "libmysql.lib")  int main(int argc, char* argv[])  {          //          MYSQL* conn = mysql_init(NULL);            //          if (!mysql_real_connect(conn, "192.168.175.130", "root", "love", "inerdns", 0, NULL, 0))          {                  printf("mysql_real_connect() error: %s\n", mysql_error(conn));                  return 1;          }            //          if (mysql_query(conn, "select * from probe_result"))          {                  printf("mysql_query() error: %s\n", mysql_error(conn));                  return 2;          }            //          MYSQL_RES* res = mysql_use_result(conn);          //MYSQL_RES* res = mysql_store_result(conn);            //          unsigned long num_rows = mysql_num_rows(res);          unsigned int num_fields = mysql_num_fields(res);          printf("num_rows:%d, num_fields:%d\n", num_rows, num_fields);            //          MYSQL_ROW row;          while ( (row = mysql_fetch_row(res)) != NULL)          {                  int i;                for (i=0; i<num_fields; i++)                {                        /////////////////////////only modify here//////////////////////                        MYSQL_FIELD *field;                        field = mysql_fetch_field_direct(res, i);                        printf("Field %d is %s\n", i, field->name);                        //////////////////////////////////////////////////////////////                }                printf("\n");        }            //          num_rows = mysql_num_rows(res);          printf("num_rows:%d, num_fields:%d\n", num_rows, num_fields);            //          mysql_free_result(res);            //          mysql_close(conn);            return 0;  } 

三、运行结果



参考资料:

        mysql使用C API连接数据库:http://no001.blog.51cto.com/1142339/340979


0 0