• 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手册

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

  • 相关阅读:
    菜鸟水平如何在Android Studio中添加uiautomator测试框架
    Android Studio入门问题汇总
    Win10上启动UICrawler自动遍历时报 "org.openqa.selenium.WebDriverException: An unknown server-side error occur red while processing the command. Original error: Could not sign with default certifi cate."
    python pip常用命令
    生动理解多态中向上与向下转型
    final 关键字的作用及应用案例
    如何使用 eclipse进行断点 debug 程序
    java中自己常犯的错误汇总
    Java中,类与类,类中的代码执行顺序
    Java中变量之局部变量、本类成员变量、父类成员变量的访问方法
  • 原文地址:https://www.cnblogs.com/linbc/p/1503924.html
Copyright © 2020-2023  润新知