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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值