MySQL C代码连接

环境:5.7.42-0ubuntu0.18.04.1 (Ubuntu)

mysql接口介绍

初始化mysql指针

MySQL C代码连接_第1张图片

用来生成MySQL对象,返回值为MySQL*,MySQL*是MySQL对象的指针。
MySQL在mysql.h中是一个结构体
MySQL C代码连接_第2张图片

链接数据库

初始化完毕之后,必须先链接数据库,在进行后续操作。(mysql网络部分是基于TCP/IP的)MySQL C代码连接_第3张图片

  • 第一个参数,填之前初始化的MySQL*指针
  • 第二个参数,填要连接的主机IP地址,如果主机为 NULL 或字符串“localhost”,则假定连接到本地主机。在 Unix 上,客户端使用 Unix 套接字文件进行连接。 unix_socket 参数或 MYSQL_UNIX_PORT 环境变量可用于指定套接字名称。否则使用TCP/IP连接。
  • 第三个参数,填要连接的用户名
  • 第四个参数,填要登录该用户使用的密码,无密码填NULL
  • 第五个参数,填要使用的数据库名字
  • 第六个参数,填主机端口号,主机参数决定连接的类型。如果 port 不为 0,则该值用作 TCP/IP 连接的端口号。
  • 第七个参数,主机参数决定连接的类型。如果 unix_socket 不为 NULL,则该字符串指定要使用的套接字或命名管道。
  • 第八个参数,一般填0,填其他则启用其他功能,具体看官网

下发mysql命令

在这里插入图片描述

  • 第一个参数上面已经介绍过
  • 第二个参数为要执行的sql语句,如“select * from table”
  • 第三个参数为第二个参数的大小,即strlen(length)

获取执行结果

sql执行完以后,如果是查询语句,我们还要读取数据,如果update,insert等语句,那么就看下操
作成功与否即可。MySQL C代码连接_第4张图片

  • 该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记得调用void mysql_free_result(MYSQL_RES *result),不然是肯定会造成内存泄漏的。
  • 执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了
  • 下面的api基本就是读取MYSQL_RES 中的数据。
    MySQL C代码连接_第5张图片
    四个接口的作用分别是:
  • 返回结果集中的行数
  • 返回结果集中的列数
  • 将结果集的一列的定义返回为 MYSQL_FIELD 结构。该结构中的name字段就是列名
  • mysql_fetch_row() 检索结果集的下一行,即它是一行一行读取的,不是所有的都返回到MYSQL_ROW

代码演示

数据库名称为11_30,表名为stu
MySQL C代码连接_第6张图片

#include                                                                                               
#include
#include
#include
using namespace std;

const char *host = NULL;
const char *user = "root";
const char *passwd = NULL;
const char *db = "11_30";
unsigned int port = 0;
const char *unix_socket = NULL;
unsigned long clientflag = 0;

void mysql_module()
{   
    //初始化
    MYSQL* mysql_ = mysql_init(NULL);
    //建立连接
    if(mysql_real_connect(mysql_, host, user, passwd, db, port, unix_socket, clientflag)==NULL){
        cout<<"连接错误"<<endl;
        cout<<mysql_errno(mysql_)<<endl;
        exit(-1);
    }
    mysql_set_character_set(mysql_, "utf8"); // 设置默认字符集
    
    //查询语句
    const char* stmt_str="select* from stu";
    if(mysql_real_query(mysql_,stmt_str,strlen(stmt_str))!=0){
        cout<<"执行查询失败"<<endl;
        cout<<mysql_errno(mysql_)<<endl;
        exit(-1);
    }
    
    //获取查询结果保存在MYSQL_RES中
    MYSQL_RES* res=NULL;
    res = mysql_store_result(mysql_);
    if(res==NULL){
        perror("返回结果集失败或者为空");
       	printf("%u\n",mysql_errno(mysql_));
        exit(-1);
    }

    uint64_t rows = mysql_num_rows(res);//获取行数
    unsigned int cols = mysql_num_fields(res);//获取列数
    MYSQL_FIELD * filed = mysql_fetch_fields(res);//获取列名
    cout<<"行:"<<rows<<endl;
    cout<<"列:"<<cols<<endl;
    //打印结果集
    for(int i=0;i<cols;i++){
        printf("%s ",filed[i].name);
    }
    printf("\n");
    for(int i=0;i<rows;i++){
        MYSQL_ROW content = mysql_fetch_row(res);//获取结果内容
        for(int j=0;j<cols;j++)
            printf("%s ",content[j]);
        printf("\n");
    }
    mysql_free_result(res);
    mysql_close(mysql_);//关闭连接
}
int main(){
    mysql_module();
    return 0;
}

打印结果:
MySQL C代码连接_第7张图片

你可能感兴趣的:(MySQL,mysql,c语言,数据库,c++)