mysql的c api 简单用法

首先第一步,当然是去mysql网站下载一下C API的库文件以及头文件了

地址为http://dev.mysql.com/downloads/connector/c/6.0.html

 

无非也是几个数据结构以及几个函数

先看一下数据结构,如下

MYSQL
这个结构表示对一个数据库连接的句柄,它被用于几乎所有的 MySQL函数。 
MYSQL_RES
这个结构代表返回行的一个查询的( SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。从查询返回的信息在本章下文称为 结果集合
MYSQL_ROW
这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节) 行通过调用 mysql_fetch_row()获得。 
MYSQL_FIELD
这个结构包含字段信息,例如字段名、类型和大小。其成员在下面更详细地描述。你可以通过重复调用 mysql_fetch_field()对每一列获得 MYSQL_FIELD结构。字段值不是这个结构的部分;他们被包含在一个 MYSQL_ROW结构中。

 

然后介绍几个最常用的api函数

 

mysql_affected_rows() 返回被最新的UPDATE, DELETEINSERT查询影响的行数。
mysql_close() 关闭一个服务器连接。
mysql_errno() 返回最近被调用的MySQL函数的出错编号。
mysql_error() 返回最近被调用的MySQL函数的出错消息。
mysql_fetch_row() 从结果集合中取得下一行。
mysql_field_count() 返回最近查询的结果列的数量。
mysql_init() 获得或初始化一个MYSQL结构。
mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。
mysql_num_rows() 返回一个结果集合中的行的数量。
mysql_query() 执行指定为一个空结尾的字符串的SQL查询。
mysql_real_connect() 连接一个MySQL服务器。
mysql_real_query() 执行指定为带计数的字符串的SQL查询。

 

然后最直观的看看代码吧。。

//  mysql_demo.cpp : 定义控制台应用程序的入口点。
//

#include 
" stdafx.h "
#include 
< my_global.h >
#include 
< mysql.h >

#pragma  comment(lib,"mysqlclient.lib")

static   char   * opt_host_name  =  NULL;         /*服务器主机名称 默认为localhost*/
static   char   * opt_user_name  =   " root " ;         /*数据库用户名 默认为当前登录名*/
static   char   * opt_password  =  NULL;         /*密码 默认为空*/
static   uint  opt_port_num  =   0 ;             /*端口 使用内建值*/
static   char   * opt_socket_name  =  NULL;     /*socket name (use build-in value)*/
static   char   * opt_db_name  =   " luaRules " ;         /*数据库 名称 默认为空*/
static   uint  opt_flags  =   0 ;                 /*连接参数*/


static  MYSQL  * conn;                         /*pointer to connection handler*/

void  print_error(MYSQL  * conn,  const   char   * title) {
    fprintf(stderr,
"%s:\nError %u (%s)\n",title,mysql_errno(conn),mysql_error(conn));
}


void  process_result_set(MYSQL  * conn,MYSQL_RES  * res_set) {
    MYSQL_ROW row;
    
uint i;

    
while ((row = mysql_fetch_row(res_set)) != NULL){
        
for(i=0;i<mysql_num_fields(res_set);i++){
            
if (i > 0)
                fputc(
'\t',stdout);
            printf(
"%s",row[i] != NULL ? row[i] : "NULL");
        }

        fputc(
'\n',stdout);
    }


    
if(mysql_errno(conn) != 0)
        print_error(conn,
"mysql_fetch_row() failed");
    
else
        printf(
"%lu rows returned \n",
            (
ulong)mysql_num_rows(res_set));
}


int  _tmain( int  argc, _TCHAR *  argv[])
{
    
/*初始化数据库指针*/
    
if( (conn = mysql_init(NULL))== NULL){
        fprintf(stderr,
"mysql 初始化失败(可能是内存溢出)!\n");
        exit(
1);
    }

    
/*连接到数据库*/
    
if(mysql_real_connect(conn,opt_host_name,opt_user_name,opt_password,
        opt_db_name,opt_port_num,opt_socket_name,opt_flags) 
== NULL){            
            
            fprintf(stderr,
"mysql_real_connect 失败:\nError %u (%s)\n",
                mysql_errno(conn),mysql_error(conn));    

            mysql_close(conn);
            exit(
1);
    }


    
/*执行插入语句*/
    
if(mysql_query(conn,"insert into t_services (ServiceID,ServiceName) values ('RULE_LINBC_001','demo1')")){
        print_error(conn,
"执行插入失败");
    }
else{
        printf(
"插入成功,受影响行数:%lu\n",(ulong)mysql_affected_rows(conn));
    }


    
/*查询*/
    
if(mysql_query(conn,"select * from t_services")){
        print_error(conn,
"mysql_query() error");
    }
else{
        MYSQL_RES 
*res_set;
        res_set 
= mysql_store_result(conn);    /*生成结果集*/
        
if(res_set == NULL)
            print_error(conn,
"mysql_store_result failed");
        
else {
            process_result_set(conn,res_set);
            mysql_free_result(res_set);
        }

    }


    
/*断开*/
    mysql_close(conn);
    
    getchar();
    
return 0;
}


 

本文不是为了代替mysql的文档,只是一个小demo,详细的还是得看myql手册

库的安装及头文件路径的设置就不废话了

 

 

 

你可能感兴趣的:(mysql)