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

MySQL——连接

一.引入库 

我们已经分享了很多通过命令行方式去操作数据库,那么数据库该怎么通过语言去访问呢?

这里分享怎么通过C/C++来连接数据库。

首先需要到MySQL官网,下载专门用于C/C++连接数据库的库,但是一般不需要再去官网下载。

因为在初始MySQL安装时,除了安装MySQL服务之外,其对应的库都会被一并安装。

我们可以在 "/usr/include/mysql" 路径下查看已经引入的MySQL各种头文件,至于库的位置,不同的Linux系统版本可能库的位置会不同,因此建议通过find指令去全局查询库的位置:

find / -name libmysqlclient.so;

可以通过一个简易代码来查看库是否引入成功。

#include <iostream>
#include <mysql/mysql.h>int main()
{std::cout << "version: " << mysql_get_client_info() << std::endl;return 0;
}

 该代码的作用是显示当前MySQL的版本,在编译时需要通过路径来连接对应的库:

g++ -o test test.cc -L路径 -lmysqlclient;


二.MySQL接口

初始化MySQL

MYSQL *mysql_init(MYSQL *mysql); 

用于创建一个MySQL对象,以供后续连接使用,创建失败对象为nullptr。


连接MySQL

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与语言的连接,连接失败返回nullptr。


设置字符集

mysql_set_character_set(myfd, "utf8");

MySQL与语言建立后,默认字符集是latin1,不能识别中文,因此需要设置字符集为utf8


下发MySQL命令

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

通过该函数,向MySQL发送命令,命令语句通过q参数传递

指令执行成功,返回0,执行失败返回-1。 

然而,当我们通过语言方式执行MySQL的查询指令 select 时,得到的数据并不能直接显示,但是如果查询语句执行成功,我们就可以通过如下函数获取到查询结果

MYSQL_RES *mysql_store_result(MYSQL *mysql); 

该函数会返回 MYSQL_RES 类型的变量,可以理解为一个类型为存放字符串二维数组,如果获取失败则返回nullptr变量,该类型变量会通过malloc开辟空间,因此使用之后必须进行空间释放

void mysql_free_result(MYSQL_RES* result);

获取结果的行数 

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_FIELD 结构体类型中包含列的各种属性,可通过该结构体得到列的名称

获取结果内容

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

该函数可以获取到结果集中单行的数据,并且调用之后会自动指向下一行。 

通过上述函数,就可以使用循环方法来打印出 select 的结果。 


关闭MySQL

void mysql_close(MYSQL *sock);

 

http://www.lryc.cn/news/504395.html

相关文章:

  • 前端微服务实战:大型应用的拆分与治理
  • Linux shell的七大功能 --- history
  • C++ webrtc开发(非原生开发,linux上使用libdatachannel库)
  • C语言刷题
  • LabVIEW实现RFID通信
  • Linux 网络流量控制 - 实现概述
  • 分布式 令牌桶算法 总结
  • FFMPEG视频转图片
  • docker入门实践---虚拟机环境配置
  • java要防止重复序列化的问题JSON.toJSONString转义问题
  • TS的类型守卫、类型约束实践
  • 文件转曲,限制PDF文件编辑的最佳方案!
  • MySQL系列之数据授权(安全)
  • 用 Python 实现经典的 2048 游戏:一步步带你打造属于你的小游戏!
  • Vue vs. React:两大前端框架的深度对比与分析(一)
  • React 进阶深入理解核心概念与高阶实践
  • Linux shell的七大功能 ---自动补齐、管道机制、别名
  • XML 在线格式化 - 加菲工具
  • java_多态的应用
  • Python+OpenCV系列:模版匹配
  • 【从零开始入门unity游戏开发之——C#篇10】循环结构——while、do-while、for、foreach的使用
  • Spring Boot项目使用虚拟线程
  • 实现SpringBoot项目嵌入其他项目
  • 朗致面试---IOS/安卓/Java/架构师
  • 数字信号处理:FIR滤波器
  • 鲲鹏麒麟安装Kafka-v1.1.1
  • 群控系统服务端开发模式-应用开发-操作记录功能开发
  • 昇思25天学习打卡营第33天|共赴算力时代
  • Vue 让视图区域滑到指定位置、回到顶部
  • EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用