一、安装MySQL库
我们之前学习数据库都是在 Linux 的 mysql 客户端下以纯命令行的方式操作的,但其实,我们也可以使用 C/C++/Java/Python 等语言来连接数据库,向 mysqld 下达 sql 语句并获取执行结果。不过,在这之前,我们需要先安装 MySQL 对应的库,这里我们以 C 语言连接数据库为例。
关于 MySQL 的 C语言库,我们可以直接到 MySQL 官网中去下载,然后使用 rz指令 上传到 Linux 中解压。当然我们也可以通过 yum 来直接安装 mysql client 以及 mysql devel。
我们可以使用如下指令安装mysql client 和mysql devel
sudo yum install -y mysql-community-server
sudo yum install -y mysql-community-devel
我们可以使用如下指令进行查看:
ll /etc/yum.repos.d/
安装完毕后我们就可以在 /usr/include/mysql
目录下找到 mysql 相关的头文件了:
同时,我们也可以在 /lib64/mysql/
以及 /usr/lib64/mysql
目录下找到 mysql 对应的动态库以及静态库了:
验证引入是否成功
现在,我们就可以使用 mysql 目录下头文件中提供的相关函数来连接数据库了。
不过,在正式连接数据库之前,我们可以先通过 mysql_get_client_info() 函数来验证一下 mysql 相关头文件以及动态库是否被成功引入:
函数原型:const char *mysql_get_client_info(void);
返回值: A character string that represents the MySQL client library version.
#include <iostream>
#include <mysql/mysql.h>
int main()
{
std::cout << "mysql version :" << mysql_get_client_info() << std::endl;
return 0;
}
这里有几个需要注意的地方:
- 由于我们要使用 mysql C库中的函数,所以在 mysql.cc 中我们需要包含 mysql 相关头文件。
- 在程序编译时,我们需要使用 -l 选项来指定我们要链接的 mysql 动态库,并且动态库的库名称是去掉前缀 lib 以及后缀 .so 后的剩余部分。(libmysqlclient.so -> mysqlclient)
- 由于动态库在
/usr/lib64/mysql/
目录下,而系统的默认库路径是/usr/lib64/
,所以我们还需要使用 -L 选项来指定动态库的路径。 - mysql C语言相关头文件在
/usr/include/mysql/
目录下,而系统默认的头文件搜索路径是/usr/include/
,所以按道理来说,我们也是需要使用 -I 选项指明头文件路径的;但这里由于我们在编写源程序,包含头文件时使用的是mysql/mysql.h
,而不仅仅是mysql.h
,所以不需要指定。
二、MySQL C API 相关接口
1.C API官方文档
关于C语言连接数据所涉及到的各种数据结构的介绍以及相关函数的使用其实在 MySQL C API 官方文档中已经给出了,我们可以通过它来快速了解并上手 MySQL C API。
2.初始化 MYSQL句柄
要使用 MySQL C语言库,需要先使用 mysql_init
函数完成对 MYSQL 结构体指针的初始化工作。
// Mysql操作句柄初始化
// 参数说明:
// mysql为空则动态申请句柄空间进⾏初始化
// 返回值: 成功返回句柄指针, 失败返回NULL
MYSQL *mysql_init(MYSQL *mysql);
注意:mysql_init 函数的参数以及返回值都是 MYSQL 指针类型,对于 MYSQL,大家把它类比到C语言中的文件指针来理解即可。MYSQL 和C语言文件 FILE 一样,本质上都是一个结构体。
3.连接MySQL
// 连接mysql服务器
// 参数说明:
// mysql--初始化完成的句柄
// host---连接的mysql服务器的地址
// user---连接的服务器的⽤户名
// passwd-连接的服务器的密码
// db ----默认选择的数据库名称
// port---连接的服务器的端⼝: 默认是3306端⼝
// unix_socket---通信管道⽂件或者socket⽂件,通常置NULL
// client_flag---客户端标志位,通常置0
// 返回值:成功返回句柄指针,失败返回NULL
MYSQL