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

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.mrgr.cn/news/71338.html

相关文章:

  • AI Prompt Engineering
  • DevOps-Jenkins-新手入门级
  • (测试基础)第一章:测试基础
  • Android-如何实现Apng动画播放
  • 美畅物联丨智能分析,安全管控:视频汇聚平台助力智慧工地建设
  • Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】
  • 力扣--树题总结
  • JS爬虫实战之TikTok_Shop验证码
  • Linux_1
  • 软件测试基础二十三 (接口测试 集成UnitTest)
  • 【miniMax开放平台-注册安全分析报告】
  • 前端js用canvas合成图片并转file对象
  • 【GPTs】Get Simpsonized:一键变身趣味辛普森角色
  • 2025计算机毕设选题精选推荐【Java方向】
  • PCB过孔分哪些,设计需注意事项
  • VirtualBox和 Vagrant
  • 力扣 LeetCode 977. 有序数组的平方(Day1:数组)
  • docker使用过程中安装wsl的问题wsl update failed错误0x800701bc
  • Python练习19
  • 24/11/12 算法笔记<强化学习> 自注意力机制
  • 【vs主程序 链接 实时生成库的问题】
  • HTTP状态码详解
  • 接口自动化测试实战(全网唯一)
  • integer==与equals()结果不同
  • Node.js笔记
  • 卸载 Python