iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL使用C语言连接
  • 539
分享到

MySQL使用C语言连接

mysqlc语言数据库 2023-09-09 20:09:39 539人浏览 独家记忆
摘要

文章目录 一、准备工作二、MySQL 的 C 语言接口1. mysql_init2. mysql_real_connect3. mysql_close4. mysql_set_characte

文章目录

一、准备工作

要使用 C 语言连接 Mysql,我们需要做一些准备工作:

  • 保证 mysql 服务有效。
  • 在 Mysql 官网上下载适合自己平台的 MySQL Connector/C 库。

对应的网址:https://downloads.mysql.com/arcHives/c-c/在这里插入图片描述

把压缩包下载下来后,将其解压到当前目录。

在这里插入图片描述

进入解压后的目录后,可以看到该目录下的 include 目录和 lib 目录。
其中,include 目录下存放的是头文件(方法的声明),lib 目录下存放的是动静态库(方法的实现,打包成库)。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

必须要让程序在运行时能找到上述的库文件!


为了验证库的引入是否成功,可以通过调用其中的mysql_get_client_info函数来验证。

该函数的作用是获取 MySQL 客户端的版本信息。

#include #include #include int main(){    std::cout << "client version: " << mysql_get_client_info() << std::endl;    return 0;}

运行结果:
在这里插入图片描述

程序成功运行,说明库已经成功被引入了,至此库的引入工作已经做完。

二、MySQL 的 C 语言接口

1. mysql_init

MYSQL *mysql_init(MYSQL *mysql);

mysql_init函数的作用:创建一个 MYSQL 对象(该对象用于连接数据库)。

mysql_init函数的参数:
 ① mysql:MYSQL 结构体指针,一般设置为 NULL 。

mysql_init函数的返回值:
 ① 成功,返回一个指向 MYSQL 对象的指针。
 ② 失败,返回 NULL 。


MYSQL 对象的定义如下:

typedef struct st_mysql{  NETnet;  unsigned char*connector_fd;  char*host,*user,*passwd,*unix_Socket,*server_version,*host_info;  char          *info, *db;  struct charset_info_st *charset;  MYSQL_FIELD*fields;  MEM_ROOTfield_alloc;  my_ulonglong affected_rows;  my_ulonglong insert_id;  my_ulonglong extra_info;  unsigned long thread_id;  unsigned long packet_length;  unsigned intport;  unsigned long client_flag,server_capabilities;  unsigned intprotocol_version;  unsigned intfield_count;  unsigned int server_status;  unsigned int  server_language;  unsigned intwarning_count;  struct st_mysql_options options;  enum mysql_status status;  my_boolfree_me;  my_boolreconnect;    char        scramble[SCRAMBLE_LENGTH+1];  my_bool unused1;  void *unused2, *unused3, *unused4, *unused5;  LIST  *stmts;                       const struct st_mysql_methods *methods;  void *thd;    my_bool *unbuffered_fetch_owner;    char *info_buffer;  void *extension;} MYSQL;

MYSQL 对象里有很多连接基本参数,它也包含了一个叫 st_mysql_methods 的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。

2. 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_real_connect函数的作用:连接数据库。

mysql_real_connect函数的参数:
 ① mysql:MYSQL 对象指针。
 ② host:要连接的 MySQL 服务器的 IP 地址。
 ③ user:用户名,以哪个用户身份连接。
 ④ passwd:用户密码。
 ⑤ db:要连接的数据库。
 ⑥ port:要连接的 MySQL 服务器的端口号。
 ⑦ unix_socket:通常设置为 NULL 。
 ⑧ clientflag:通常设置为 0 。

mysql_real_connect函数的返回值:
 ① 成功,返回一个指向 MYSQL 对象的指针,与第一个参数 mysql 的值相同。
 ② 失败,返回 NULL 。

3. mysql_close

void mysql_close(MYSQL *sock);

mysql_close函数的作用:关闭数据库连接。

mysql_close函数的参数:
 ① sock:MYSQL 对象指针。

mysql_close函数的返回值:无。

4. mysql_set_character_set

在连接数据库之后,需要先统一客户端和服务器的编码格式,避免在数据交互的过程中出现乱码。

int mysql_set_character_set(MYSQL *mysql, const char *csname);

mysql_set_character_set函数的作用:设置编码格式。

mysql_set_character_set函数的参数:
 ① mysql:MYSQL 对象指针。
 ② csname:要设置成哪种字符集。

mysql_set_character_set函数的返回值:
 ① 成功,为 0 。
 ② 失败,为非 0 。

5. mysql_query

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

mysql_query函数的作用:下发 SQL 请求。

mysql_query函数的参数:
 ① mysql:MYSQL 对象指针。
 ② q:要执行的 SQL 语句(语句结尾可以不带分号)。

mysql_query函数的返回值:
 ① 成功,为 0 。
 ② 失败,为非 0 。

6. mysql_store_result

MYSQL_RES *mysql_store_result(MYSQL *mysql);

mysql_store_result函数的作用:获取查询结果。

mysql_store_result函数的参数:
 ① mysql:MYSQL 对象指针。

mysql_store_result函数的返回值:
 ① 成功,返回一个指向 MYSQL_RES 对象的指针。
 ② 失败,返回 NULL 。

该函数会调用 MYSQL 变量中的 st_mysql_methods 中对应的函数指针来获取查询结果。

该函数会 malloc 出一个 MYSQL_RES 结构体变量,将获取到的查询结果保存到该变量中,最后返回该变量的指针。

由于 MYSQL_RES 的内存空间是 malloc 出来的,所以在使用完之后一定要记得调用 free 函数来释放对应的内存空间,否则会造成内存泄漏。


执行完mysql_store_result以后,其实要查询的数据都已经在 MYSQL_RES 变量中了,下面的函数基本就是读取 MYSQL_RES 中的数据,参数都是 MYSQL_RES 对象指针:

// 获取结果的行数my_ulonglong mysql_num_rows(MYSQL_RES *res);// 获取结果的列数unsigned int mysql_num_fields(MYSQL_RES *res);// 获取结果的列属性MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);// 获取结果中的一行记录MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

关于mysql_fetch_row函数的返回值 MYSQL_ROW:
MYSQL_ROW,即结果中的一行记录,对应着多个列信息,实际上就是一个字符串数组,因此,MYSQL_ROW 类型,本质就是 char** 类型,其定义如下:

typedef char **MYSQL_ROW;

三、使用示例

1.连接数据库和关闭数据库连接

mysql_real_connectmysql_close

#include #include #include #include const std::string host = "127.0.0.1";const std::string user = "skc";const std::string passWord = "32aT.&6/1*hqrs/s";const std::string db = "102_db";const unsigned int port = 3306;int main(){    // std::cout << "client version: " << mysql_get_client_info() << std::endl;         //0. 创建mysql句柄    MYSQL *my = mysql_init(nullptr);    //1. 连接数据库    if(mysql_real_connect(my, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr){        std::cout << "connect failed" << std::endl;        return 1;    }    std::cout << "connect success" << std::endl;        //2. 访问数据库    //3. 关闭数据库连接    mysql_close(my);    return 0;}

运行结果:在这里插入图片描述

2.访问数据库

mysql_query

  • 执行 insert 操作:
#include #include #include #include const std::string host = "127.0.0.1";const std::string user = "skc";const std::string password = "32aT.&6/1*hqrs/s";const std::string db = "102_db";const unsigned int port = 3306;int main(){    // std::cout << "client version: " << mysql_get_client_info() << std::endl;         //0. 创建mysql句柄    MYSQL *my = mysql_init(nullptr);    //1. 连接数据库    if(mysql_real_connect(my, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr){        std::cout << "connect failed" << std::endl;        return 1;    }    //1.1: 需要设置连接的编码格式,否则会出现乱码    mysql_set_character_set(my, "utf8");    std::cout << "connect success" << std::endl;        //2. 访问数据库    std::string sql = "insert into mytest values (4, \'猪八戒\')";    int res = mysql_query(my, sql.c_str());    if(res != 0){        std::cout << "execute: " << sql << " failed" << std::endl;        return 2;    }    std::cout << "execute: " << sql << " success" << std::endl;    //3. 关闭数据库连接    mysql_close(my);    return 0;}

运行结果:
在这里插入图片描述
执行了 insert 操作。在这里插入图片描述

  • 执行 delete 操作:
std::string sql = "delete from mytest where id=3";

运行结果:
在这里插入图片描述
执行了 delete 操作。
在这里插入图片描述

  • 执行 update 操作:
std::string sql = "update mytest set name=\'唐僧\' where id=2";

运行结果:
在这里插入图片描述
执行了 update 操作。
在这里插入图片描述

  • 执行 select 操作:
#include #include #include #include const std::string host = "127.0.0.1";const std::string user = "skc";const std::string password = "32aT.&6/1*hqrs/s";const std::string db = "102_db";const unsigned int port = 3306;int main(){    // std::cout << "client version: " << mysql_get_client_info() << std::endl;         //0. 创建mysql句柄    MYSQL *my = mysql_init(nullptr);    //1. 连接数据库    if(mysql_real_connect(my, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr){        std::cout << "connect failed" << std::endl;        return 1;    }    //1.1: 需要设置连接的编码格式    mysql_set_character_set(my, "utf8");    std::cout << "connect success" << std::endl;        //2. 访问数据库    // 增删改是最简单的,因为只要sql执行完毕就完了    // std::string sql = "insert into mytest values (4, \'猪八戒\')";    // std::string sql = "delete from mytest where id=3";    // std::string sql = "update mytest set name=\'唐僧\' where id=2";        //2.1 select 其实是最不好处理的!select sql执行完只是第一步,还需要对数据进一步解析    //std::string sql = "select * from mytest where id=4";    //std::string sql = "select name from mytest where id=4";    std::string sql = "select * from mytest";    int code = mysql_query(my, sql.c_str());    if(code != 0){        std::cout << "execute: " << sql << " failed" << std::endl;        return 2;    }    std::cout << "execute: " << sql << " success" << std::endl;    //2.2 解析数据 -- 获取行号和列号    MYSQL_RES *result = mysql_store_result(my);    int rows = mysql_num_rows(result);    int cols = mysql_num_fields(result);    std::cout << "行数:" << rows << ",列数:" << cols << std::endl;    //2.3 解析数据 -- 获取表中列名 -- 一般不用,仅仅是为了测试代码的完整性    MYSQL_FIELD *fields = mysql_fetch_fields(result);    for(int i = 0; i < cols; i++){        std::cout << fields[i].name << "\t";    }    std::cout << std::endl;    //2.4 解析数据 -- 获取表中的数据 -- 重要    for(int i = 0; i < rows; i++){        MYSQL_ROW line = mysql_fetch_row(result);  // 获取完整的一行记录(默认从前往后)        for(int j = 0; j < cols; j++){            std::cout << line[j] << "\t";  // 将一行记录内部的多列字符串依次打印        }        std::cout << std::endl;    }    free(result);  // 释放内存空间    //3. 关闭数据库连接    mysql_close(my);    return 0;}

运行结果:
在这里插入图片描述对照命令行下的 select 操作,没问题。
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_59938453/article/details/130438101

您可能感兴趣的文档:

--结束END--

本文标题: MySQL使用C语言连接

本文链接: https://www.lsjlt.com/news/401884.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL使用C语言连接
    文章目录 一、准备工作二、MySQL 的 C 语言接口1. mysql_init2. mysql_real_connect3. mysql_close4. mysql_set_characte...
    99+
    2023-09-09
    mysql c语言 数据库
  • centos7.9安装libmysqlclient,用C语言连接mysql
    前言 我的mysql版本是8.0.31。在linux中使用第三方库时首先需要安装库,然后在编译时指定链接库名,要注意的是这个库是放在/usr/lib64/mysql下的,所以需要在编译时指定动态库的路...
    99+
    2023-09-02
    mysql c语言 数据库
  • MySQL系列教程之使用C语言来连接数据库
    目录写在前面一、准备工作1.1 把 libmysql.dll 和 libmysql.lib 文件复制到工程目录下1.2 添加 libmysql.lib 1.3 添加 inc...
    99+
    2024-04-02
  • 【C/C++与MySql的连接及使用详解】
    文章目录 概要:本期主要讲解C或者C++怎么在程序中连接MySql数据库。主要步骤一、MySql的链接库二、项目环境配置三、项目内调用MySql类进行数据库操作1.准备工作2.连接数据库3.数据库建表4.向表中插入数据5.查询表中数...
    99+
    2023-08-20
    mysql c语言 c++
  • C#连接MySQL
    一、环境搭配          安装MySQL,引用MySql.Data.DLL文件,这个MySql.Data.DLL文件在你安装Mysql的时候已经下载好给你的了。         把它复制到项目的Debug目录下,然后引用即可。 二...
    99+
    2023-09-05
    mysql 数据库 c#
  • c语言如何把字符串连接
    在C语言中,可以使用strcat函数将两个字符串连接起来。strcat函数的原型如下:```cchar* strcat(char* ...
    99+
    2023-08-15
    c语言
  • IDEA中使用Java语言连接MySQL实现增、删、查操作
    使用Java连接MySQL数据库可以通过以下步骤实现增、删、查操作: 1、导入相关的依赖库。需要引入MySQL数据库的驱动库,可以在...
    99+
    2024-04-09
    java IDEA
  • C语言怎么连接两个字符串
    在C语言中,连接两个字符串可以使用`strcat()`函数或者手动实现。1. 使用`strcat()`函数:`strcat()`函数...
    99+
    2023-08-30
    C语言
  • C++怎么连接并使用MySQL数据库
    这篇文章主要为大家展示了“C++怎么连接并使用MySQL数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++怎么连接并使用MySQL数据库”这篇文章吧。1...
    99+
    2024-04-02
  • C/C++连接MYSQL(巨详)
    首先,C/C++连接MYSQL数据库的思路都是将MYSQL官方提供的工具加入编译器的库或路径(至少是Dev-C++和VS是这样) 那这些工具在哪儿呢? 它们在你MYSQL安装目录的MYSQL Server文件夹下的"include"文件夹和...
    99+
    2023-09-16
    mysql c++ 数据库 c语言
  • 易语言怎么连接云服务器mysql
    使用易语言连接mysql数据库的方法具体方法如下:.子程序 _按钮1_被单击.局部变量 b, 整数型.局部变量 取查询值, 整数型.局部变量 MySQL语句, 文本型.局部变量 记录数量, 整数型.局部变量 i, 整数型.局部变量 姓名, ...
    99+
    2024-04-02
  • 怎么使用mysql-connector连接使用MySQL
    这篇“怎么使用mysql-connector连接使用MySQL”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用mysq...
    99+
    2023-06-08
  • C语言实现数字连连看
    本文实例为大家分享了C语言实现数字连连看的具体代码,供大家参考,具体内容如下 要求 连连看小游戏开发,使用二维数组来保存游戏地图的数据,实现连连看的核心功能。欢乐连连看的功能有:主界...
    99+
    2024-04-02
  • C语言如何连接两个数组的内容
    这篇文章主要介绍了C语言如何连接两个数组的内容,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。要求:定义两个数组,并用指针将两个数组的内容连接到一起源代码如下:#include...
    99+
    2023-06-26
  • C#如何连接使用Zookeeper
      Zookeeper作为分布式的服务框架,虽然是java写的,但是强大的C#也可以连接使用。   C#要连接使用Zookeeper,需要借助第三方插件,而现在主要有两个插件可供使用...
    99+
    2024-04-02
  • 如何使用Go语言实现Websocket长连接保持
    如何使用Go语言实现Websocket长连接保持Websocket是HTML5提供的一种协议,可以实现服务器与客户端之间的双向通信。在实际开发中,很多场景需要保持长连接,以便实时推送数据或实现即时通讯功能。本文将介绍如何使用Go语言实现We...
    99+
    2023-12-14
    Go语言 websocket 长连接保持
  • C#连接MySQL数据库
    目录 一、引用MySql.Data.dll文件 二、连接、关闭数据库 三、数据库增删改查 附:完整代码 一、引用MySql.Data.dll文件 创建C#窗体应用程序,解决方案资源管理器中找到“引用”,右键,选择添加引用。 在MyS...
    99+
    2023-10-28
    c# 数据库 mysql
  • c++ 连接mysql数据库
            使用vs2019对window11中的数据库进行连接 1. 配置连接环境         首先需要把mysql中的头文件和库文件放入到c++项目工程中 打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我...
    99+
    2023-09-03
    数据库
  • C# 连接 MySQL 数据库
    目录 一、需求 二、新建 C# 项目 三、MySQL数据库 四、MySqlHelper 五、测试 一、需求 C# 使用 MySQL 数据库的情况还是比较少的,大部分使用 Windows 平台一般使用 SQL Server,在两年前我...
    99+
    2023-09-02
    c# 数据库
  • C++中怎么连接MySQL
    C++中怎么连接MySQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、为什么使用MySQL C API效率!C++可以通过多种方式连接上...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作