安装 MySQL 库
在 CentOS7 下,使用命令安装 MySQL:
yum install mysql-devel
在/usr/include
可以看到一个mysql
新目录,里面存放的是 mysql 的头文件。另外在 /lib64/mysql/
以及 /usr/lib64/mysql
目录下存放了 mysql 的动态和静态库。
用一个 MySQL 库提供的接口验证 MySQL 库是否安装成功:
#include <iostream>
#include <mysql/mysql.h>
using namespace std;
int main()
{
cout << "mysql version: " << mysql_get_client_info() << endl;
return 0;
}
编译:
g++ sql.cc -o sql -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient

编译选项中关于库的使用:
-I
:用于指明头文件的搜索路径。-L
:用于指明库文件的搜索路径。-l
:用于指明需要连接库文件路径下的哪一个库。

因为这个库没有在链接的默认目录/usr/lib64
下,所以作为第三方导入的库,在编译时需要显式地指定-L/usr/lib64/mysql
;同理,头文件不在默认目录/usr/include
下,所以要显式地指定-I/usr/include/mysql
。在这个目录下,存在名为mysqlclient
的第三方库,同样需要用-l
显式地声明。
只要正常运行上面的程序,那就表明库的链接没有问题,剩下的就是简单的 API 使用。
连接 MySQL
MYSQL 类
在使用 MySQL 提供的接口之前,需要了解一下这个重要的类。
MYSQL
类是一个非常核心的结构体,它用于表示与 MySQL 服务器的一个连接实例。在客户端程序中,这个结构体用来保存客户端与数据库服务器之间连接的所有必要信息,包括但不限于:
- 服务器的地址
- 用户名和密码
- 正在使用的数据库
- 网络连接的状态和配置
- 错误信息和错误码
- 查询结果
- 选项设置
在mysql.h
中可以查看 MYSQL 结构体的定义(了解即可):
typedef struct st_mysql
{
NET net; /* Communication parameters */
unsigned char *connector_fd; /* ConnectorFd for SSL */
char *host,*user,*passwd,*unix_socket,*server_version,*host_info;
char *info, *db;
struct charset_info_st *charset;
MYSQL_FIELD *fields;
MEM_ROOT field_alloc;
my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR */
my_ulonglong extra_info; /* Not used */
unsigned long thread_id; /* Id for connection in server */
unsigned long packet_length;
unsigned int port;
unsigned long client_flag,server_capabilities;
unsigned int protocol_version;
unsigned int field_count;
unsigned int server_status;
unsigned int server_language;
unsigned int warning_count;
struct st_mysql_options options;
enum mysql_status status;
my_bool free_me; /* If free in mysql_close */
my_bool reconnect; /* set to 1 if automatic reconnect */