当前位置: 首页 > article >正文

MySQL 如何用C语言连接

  ✨✨✨励志成为超级技术宅  ✨✨✨

        本文主要讲解在Linux服务器上,如何使用c语言MySQL库的接口来对MySQL数据库进行操作,如果没有服务器安装MySQL,也可以先学学看怎么用c语言mysql库的接口,还是比较容易的了。(●☌◡☌●)。那么开始讲解吧!

一.部分接口讲解 

         我们先来看接口的定义,这部分比较无聊,我们也可以先看第二部分的代码使用 ,再返回来看看。      

1.MYSQL *mysql_init(MYSQL *mysql)

作用:对数据库进行初始化,要使用库,必须先进行初始化

参数:MYSQL *mysql:这是一个指向 MYSQL 结构体的指针。如果传入 NULLmysql_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服务器。

参数:

  1. MYSQL *mysql这是一个已经通过 mysql_init 初始化的 MYSQL 连接句柄。
  2. const char *host:MySQL 服务器的主机名或 IP 地址。可以是 NULL 或 "localhost",表示连接到本地服务器。
  3. const char *user:用于连接数据库的用户名。
  4. const char *passwd:对应用户的密码。
  5. const char *db:要连接的数据库名,也可以置为空,后面调用其他接口选择。
  6. unsigned int port:MySQL 服务器的端口号。如果设置为 0,则使用默认端口(通常是 3306)。
  7. const char *unix_socket:UNIX 套接字文件的路径,我们通常设置为 NUll,使用默认的 UNIX 套接字文件路径。
  8. unsigned long client_flag:客户端标志,用于指定连接选项。可以是多个标志的按位或组合,比如 CLIENT_INTERACTIVECLIENT_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语言连接数据库就讲解到这了,我们只要按流程依此使用相关接口就行了,还是挺简单的吧,感觉有帮助还请点个赞了,这真的很重要!(๑•́ ₃ •̀๑)/


http://www.kler.cn/a/396329.html

相关文章:

  • Scala的Array
  • 企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群
  • QT QLineEdit失去焦点事件问题与解决
  • vue项目PC端和移动端实现在线预览pptx文件
  • 31-Shard Allocation Awareness(机架感知)
  • Android音视频直播低延迟探究之:WLAN低延迟模式
  • 角谷猜想的步数
  • JMX Exporter源码解读+生产环境最佳实践+解决其抓取指标超时问题
  • 关于adb shell登录开发板后terminal显示不完整
  • Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式
  • 直接映射缓存配置
  • 罗马数字转整数---每日小题
  • ctfshow-web入门-SSTI(web369-web372)下
  • 数据结构-二叉树及其遍历
  • 第二十九篇——线性代数:“矩阵”到底怎么用?
  • 【数据结构】双向链表定义与实现
  • linux 工具curl详解
  • 效益登记册效益管理计划
  • 用WordPress需要学习哪些编程知识
  • CentOS 9 配置网卡
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • NPOI 实现Excel模板导出
  • 【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】
  • 【Unity Bug 随记】unity version control 报 xx is not in a workspace.
  • 时序数据库TDEngine
  • Day 65 || SPFA、判断负权回路、bellman_ford之单源有限最短路