✨✨✨励志成为超级技术宅 ✨✨✨
本文主要讲解在Linux服务器上,如何使用c语言MySQL库的接口来对MySQL数据库进行操作,如果没有服务器安装MySQL,也可以先学学看怎么用c语言mysql库的接口,还是比较容易的了。(●☌◡☌●)。那么开始讲解吧!
一.部分接口讲解
我们先来看接口的定义,这部分比较无聊,我们也可以先看第二部分的代码使用 ,再返回来看看。
1.MYSQL *mysql_init(MYSQL *mysql)
作用:对数据库进行初始化,要使用库,必须先进行初始化
参数:MYSQL *mysql:这是一个指向 MYSQL 结构体的指针。如果传入 NULL,mysql_init 会分配一个新的 MYSQL 结构体并返回其指针。如果传入一个非 NULL 的指针,mysql_init 会初始化这个已经存在的 MYSQL 结构体。我们一般都是直接传入NULL,如 MYSQL * mysql=mysql_init(nullptr);这样使用就行。
返回值:
- 成功时,mysql_init返回一个指向MYSQL结构体的指针。这个指针可以用于后续的数据库连接操作。
- 失败时,返回 NULL。这通常发生在内存分配失败的情况下。
2.MYSQL *mysql_real_connect()
完整接口: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),参数非常复杂我们一个个讲解。
作用:连接mysql服务器。
参数:
- MYSQL *mysql:这是一个已经通过- mysql_init初始化的- MYSQL连接句柄。
- const char *host:MySQL 服务器的主机名或 IP 地址。可以是- NULL或- "localhost",表示连接到本地服务器。
- const char *user:用于连接数据库的用户名。
- const char *passwd:对应用户的密码。
- const char *db:要连接的数据库名,也可以置为空,后面调用其他接口选择。
- unsigned int port:MySQL 服务器的端口号。如果设置为- 0,则使用默认端口(通常是- 3306)。
- const char *unix_socket:UNIX 套接字文件的路径,我们通常设置为 NUll,使用默认的 UNIX 套接字文件路径。
- unsigned long client_flag:客户端标志,用于指定连接选项。可以是多个标志的按位或组合,比如- CLIENT_INTERACTIVE、- CLIENT_FOUND_ROWS等,我们通常置为0就行。
返回值:
- 成功时,mysql_real_connect返回一个指向MYSQL结构体的指针(与传入的mysql参数相同)。这个指针表示一个成功的数据库连接,可以用于后续的数据库操作。
- 失败时,返回 NULL。此时,可以通过调用mysql_error函数来获取关于连接失败的更多信息。
3. int mysql_set_character_set(MYSQL *mysql, const char *csname)
作用:设置数据库字符集
参数:1.初始化的 MYSQL 连接句柄,2要设计的字符集名称
返回值:
- 成功时,mysql_set_character_set返回0。
- 失败时,返回非零值。此时,可以通过调用 mysql_error函数来获取关于设置字符集失败的更多信息。
4.int mysql_query(MYSQL *mysql, const char *q)
作用:执行sql语句
参数:1.初始化的 MYSQL 连接句柄,2要执行的sql语句
返回值:
- 成功时, 返回 0。
- 失败时,返回非零值。此时,可以通过调用 mysql_error函数来获取关于设置字符集失败的更多信息。
5.void mysql_close(MYSQL*mysql)
作用:关闭连接,释放句柄
参数:初始化的 MYSQL 连接句柄
二.代码使用
首先我们先登入MySQL客户端查看并选择我们需要连接的数据库

这里我们选择gobang数据库进行连接。
我们直接看代码来学学看怎么使用:
#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>
#include<iostream>
#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASS "147258Ll!"
#define DBNAME "gobang"
int main()
{
    //1. 初始化mysql句柄
    // MYSQL *mysql_init(MYSQL *mysql);
    MYSQL * mysql=mysql_init(nullptr);
    //2. 连接服务器
    // MYSQL *mysql_real_connect(mysql, host, user, pass, dbname, port, unix_socket, flag);
    mysql_real_connect(mysql,HOST,USER,PASS,DBNAME,PORT,nullptr,0);
     //3. 设置客户端字符集
    // int mysql_set_character_set(mysql, "utf8");
    int ret=mysql_set_character_set(mysql,"utf8");
    //4. 选择要操作的数据库
    //之前选择了数据库这里可以不写
    // int mysql_select_db(mysql, dbname)
    //mysql_select_db(mysql, DBNAME);
      //5. 执行sql语句
    // int mysql_query(MYSQL *mysql,  char *sql);
    const char *sql = "insert stu values(100,'xixi','17');";
    mysql_query(mysql,sql);
    //6.关闭连接,释放句柄
    mysql_close(mysql);
    return 0;
}这里我们通过c语言接口连接gobang数据库,并向stu表插入一条数据(100,xixi,17)。
我们先来看看表结构:

表中有三个属性id,name,age,运行上面的代码我们来看看结果 。

可以看到插入成功。但是这里我们执行的SQL语句并不需要结果数据,如果是select语句需要返回结果集,我们要看到对应的结果那么应该如何使用?这里我们还要学学其他接口
三.与结果集有关的其他接口
1.MYSQL_RES *mysql_store_result(MYSQL *mysql)
作用:讲sql语句执行的保存结果到本地
参数:mysql句柄
返回值:指向结果集的指针,失败为空
2.int mysql_num_rows(MYSQL_RES *res)和int mysql_num_fields(res);
作用:获取结果集的行数和列数
参数:结果集指针
返回值:行数和列数
3.MYSQL_ROW mysql_fetch_row(MYSQL_RES*res)
作用:按行遍历结果集
参数:结果集指针
返回值:MYSQL_ROW ,本质是二级指针char* *,指向一行结果集的一条记录,访问过后会自动移向下一条记录。

我们在使用过程会通常会讲上面的接口一起结合起来遍历结果集。
四.代码使用
我们再来看看包含所有接口的代码:
#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>
#include<iostream>
#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASS "147258Ll!"
#define DBNAME "gobang"
int main()
{
    //1. 初始化mysql句柄
    // MYSQL *mysql_init(MYSQL *mysql);
    MYSQL * mysql=mysql_init(nullptr);
    //2. 连接服务器
    // MYSQL *mysql_real_connect(mysql, host, user, pass, dbname, port, unix_socket, flag);
    mysql_real_connect(mysql,HOST,USER,PASS,DBNAME,PORT,nullptr,0);
     //3. 设置客户端字符集
    // int mysql_set_character_set(mysql, "utf8");
    int ret=mysql_set_character_set(mysql,"utf8");
    //4. 选择要操作的数据库
    // int mysql_select_db(mysql, dbname)
    mysql_select_db(mysql, DBNAME);
      //5. 执行sql语句
    // int mysql_query(MYSQL *mysql,  char *sql);
    const char *sql = "insert stu values(100,'xixi','17');";
    mysql_query(mysql,sql);
    const char*sql2="select *from stu;";
    mysql_query(mysql,sql2);
    //6. 如果sql语句是查询语句,则需要保存结果到本地
    // MYSQL_RES *mysql_store_result(MYSQL *mysql)
     MYSQL_RES *res=mysql_store_result(mysql);
     //7. 获取结果集中的结果条数
    // int mysql_num_rows(MYSQL_RES *res);
    // int mysql_num_fields(MYSQL_RES *res);
    int rows_num=mysql_num_rows(res);
    int cols_num=mysql_num_fields(res);
    //8. 遍历保存到本地的结果集
    for(int i=0;i<rows_num;i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for(int j=0;j<cols_num;j++)
        {
            std::cout<<row[j]<<std::endl;
        }
    }
    //9. 释放结果集
     mysql_free_result(res);
   
    //10. 关闭连接,释放句柄
    mysql_close(mysql);
    return 0;
}运行结果:

用c语言连接数据库就讲解到这了,我们只要按流程依此使用相关接口就行了,还是挺简单的吧,感觉有帮助还请点个赞了,这真的很重要!(๑•́ ₃ •̀๑)/
