1. 初始化数据库

1. 要使用库,必须先进行初始化!

MYSQL *mfp = mysql_init(NULL);

2. 连接数据库

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 clientflag);

1. 第一个参数 MYSQL是 C api中一个非常重要的变量
(mysql_init的返回值),里面内存非常丰富,
有port,dbname,charset等连接基本参数
它也包含了一个叫 st_mysql_methods的结构体变量,该变量
里面保存着很多函数指针,
这些函数指针将会在数据库连接成功以后的各种数据操作中被调用

3. 下发mysql命令

int mysql_query(MYSQL *mysql, const char *q);

建立好链接之后,获取英文没有问题,如果获取中文是乱码:
设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, “utf8”);

//建立好链接之后,获取英文没有问题,如果获取中文是乱码:
//设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, “utf8”);

在centos 7下,会出现这种问题,unbuntu mysql8.0版本及以上都是不需要的
在这里插入图片描述

#include <stdio.h>
#include <mysql/mysql.h>
#include <iostream>
using namespace std;
const char *host = "127.0.0.1";
const char *user = "xaq";
const char *passwd = "200563yy";
const char *db = "xaq";
const int port = 3306;

int main()
{
    MYSQL *mi = mysql_init(nullptr); // 初始化数据库
    if (mi == nullptr)
    {
        return 1;
    }
    cout << "init success" << endl;
    MYSQL *mc = mysql_real_connect(mi, host, user, passwd, db, port, nullptr, 0);
    if (mc == nullptr)
    {
        return 2;
    }
    cout << "connect success" << endl;
    const char *insert = "insert into navicat values(3,'李白')";
    const char *update = "update navicat set name='libai' where id=3";
    const char *select = "select * from navicat";
    int n = mysql_query(mc, select);
    if (n == 0)
    {
        cout << select << " " << "success !" << endl;
    }
    MYSQL_RES *res = mysql_store_result(mc); // 把select执行后的内容放入,二级指针
    if (res == nullptr)
    {
        return 3;
    }
    cout << "store success" << endl;
    int row = mysql_num_rows(res); // 获取结果行数mysql_num_rows
    cout << row << endl;
    int fields = mysql_num_fields(res);//获取列数
    cout << fields << endl;
    MYSQL_FIELD *fields_name = mysql_fetch_fields(res);//获取列名
    if (fields_name == nullptr)
    {
        return 4;
    }
    for (int i = 0; i < fields; i++)//遍历列
    {
        cout << fields_name[i].name << "\t";//获取每一列的名字
    }
    cout << endl;
    MYSQL_ROW line;
    for (int i = 0; i < row; i++)
    {
        line = mysql_fetch_row(res);//获取行数,得到二级指针指向行
        int j = 0;
        for (; j < fields; j++)//列
        {
            cout << line[j] << "\t";//相当于解引用,遍历行数
        }
        cout << endl;
    }
    mysql_free_result(res);//释放到申请的res空间(malloc,new)
    mysql_close(mc);//关闭连接
    return 0;
}
// int main()
// {
//  printf("mysql client Version: %s\n", mysql_get_client_info());
//  return 0;
// }

更多推荐