LINUX c 语言访问MYSQL

#include<stdio.h>
#include<stdlib.h>
#include<mysql.h>
int main(void)
{
        //MYSQL 链接指针
    MYSQL *conn_ptr;
    int res;
        //执行的查询语句
    char querySql[100] = "select fname,age  from children";
        //得到查询结果集
    MYSQL_RES *res_ptr;
        //得到的查询结果   
    MYSQL_ROW sqlrow;
        //初始化链接数据库
    conn_ptr = mysql_init(NULL);
    if(!conn_ptr)
    {
        fprintf(stderr,"mysql init error\n");
        exit(1);
    }
        //链接数据库
    conn_ptr = mysql_real_connect(conn_ptr,"localhost",
    "root","123","test",0,NULL,0);
                                                                                      
    if(conn_ptr)
    {
        printf("connect sucessful\n");
    }
    else
    {
        printf("connect failture\n");
        fprintf(stderr,"num is %d error is %s\n",
//获得出错的行号和出错信息      mysql_errno(conn_ptr),mysql_error(conn_ptr));
        exit(1);   
    }
    //执行SQL查询语句,不得到结果。可以执行删除和插入 等
    res = mysql_query(conn_ptr,querySql);
    if(0 == res)
    {
        printf("Data num is %d\n",
//可以得到查询操作影响的行号     (int)mysql_affected_rows(conn_ptr));
    }
    else
    {
        fprintf(stderr,"num is %d erros is %s\n",
        mysql_errno(conn_ptr),mysql_error(conn_ptr));
        exit(1);
    }
    //得到查询操作的结果集
    res_ptr = mysql_use_result(conn_ptr);
    if(res_ptr)
    {      //处理每个结果,返回的是每行的结果
        while((sqlrow = mysql_fetch_row(res_ptr)))
        {
            unsigned int num = 0;
                        //对每行结果进行输出
            while(num < mysql_field_count(conn_ptr))
            {
                printf("row is:%s\n",sqlrow[num]);
                num++;
            }
        }
    }
        //释放结果集指针 
    mysql_free_result(res_ptr);
        //关闭数据库
    mysql_close(conn_ptr);
    exit(0);
}




MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)


mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
参数的指定方式如下:
第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。通过mysql_options()调用,可更改多种连接选项。
“host”的值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。如果操作系统支持套接字(Unix)或命名管道(Windows),将使用它们而不是TCP/IP连接到服务器。
“user”参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。在UNIX环境下,它是当前的登录名。在Windows ODBC下,必须明确指定当前用户名。
“passwd”参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。这样,数据库管理员就能按特定的方式设置MySQL权限系统,根据用户是否拥有指定的密码,用户将获得不同的权限。




MYSQL_RES *mysql_use_result(MYSQL *mysql)


对于成功检索数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN),必须调用mysql_store_result()或mysql_use_result()。mysql_use_result()将初始化结果集检索,但并不像mysql_store_result()那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比,速度更快而且使用的内存也更少。客户端仅为当前行和通信缓冲区分配内存,分配的内存可增加到max_allowed_packet字节。



MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。当在mysql_use_result()之后使用时,当没有更多的行可检索时或如果出现一个错误,mysql_fetch_row()返回NULL。
在行中值的数量由mysql_num_fields(result)给出。如果row保存了从一个对用mysql_fetch_row()调用返回的值,指向该值的指针作为row[0]到row[mysql_num_fields(result)-1]来存取。在行中的NULL值由NULL指针指出。

在行中字段值的长度可以通过调用mysql_fetch_lengths()获得。空字段和包含NULL的字段长度都是 0;你可以通过检查该值的指针区分他们。如果指针是NULL,字段是NULL;否则字段是空的。



unsigned int mysql_field_count(MYSQL *mysql);

得到当前查询的数据库的表的列的数目,即这个表有多少列数据。


本文出自 “风清扬song” 博客,请务必保留此出处http://2309998.blog.51cto.com/2299998/1365989

LINUX c 语言访问MYSQL,布布扣,bubuko.com

LINUX c 语言访问MYSQL

上一篇:windows 2008 64位oracle11g部署问题(4)之Environment variable ORACLE_UNQNAME not defined


下一篇:修改Oracle编码