C++ 连接MYSQL首先是配置环境在配置环境之前先看几个类型:
在Viual Studio 2015的项目属性中添加包含目录和库目录如图所示:(如果使用win32 ,则需要下载对应的32bit的MYSQL的C++动态链接库和包含文件)
配置库文件:(32位的需要将平台设置为win32)
如上图在链接器的附加依赖项中添加libmysql.lib,同时要将与libmysql.lib的同一文件下的libmysql.dll拷贝到项目可执行文件所在的目录中。
配置好环境后就是连接数据库,连接操作数据库的步骤如代码所示:
1 |
|
共分为一下几个步骤:
\1. 使用MYSQL *mysql_init(MYSQL *mysql)初始化MYSQL 连接句柄mysql_con
返回值:成功MYSQL连接句柄,失败返回NULL
参数说明:
mysql : MYSQL类型的句柄
PS: 必须与void mysql_close(MYSQL* sock) 成对使用
\2. 使用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* 句柄且与第一个参数相同,否则返回NULL
参数说明:
mysql : MYSQL类型的指针,表示mysql的句柄
host : 数据库服务器主机
user :用户名
passwd : 密码
port : 端口号一般为3306
unix_socket : 使用unix连接方式,当为空是表示不使用socket或管道机制
clientflag : 值通常为0,但是,也能将其设置为下述标志的组合,以允许特定功能:
\3. 使用int mysql_query(MYSQL *mysql, const char *stmt_str) 执行SQL语句,并将结果保存到mysql句柄中
返回值:执行成功返回0,执行失败返回非0值
参数说明:
mysql : MYSQL* 类型的数据库连接句柄
stmt_str : 结构化查询语句(SQL语句)
PS: 不用用于查询语句中含有二进制的数据,如果包含二进制的数据可以使用mysql_real_query()进行代替
异常类型:
\4. 使用MYSQL_RES * mysql_store_result(MYSQL mysql);将mysql中的结果取出,并保存到MYSQL_RES 结构体中
返回值 : MYSQL_RES类型的指针,表明执行SQL语句后的结果
参数:
mysql : MYSQL* 类型的数据库连接句柄
异常类型:
\5. 使用unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);或者unsigned int STDCALL mysql_field_count(MYSQL *mysql);
读取操作结果后的字段(域)的个数
返回值:字段的个数
参数为上一步获取的MYSQL_RES或者执行mysql_query之后的数据库连接句柄mysql
\6. 使用my_ulonglong mysql_num_rows(MYSQL_RES *res);获取结果集中的记录条数
参数说明:
res : 通过mysql_store_result()获取的结果集
\7. 使用 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);读取结果集中的一条记录,同时结果集的当前记录指针会后移一条
参数说明:
res : 通过mysql_store_result()获取的结果集
\8. 最后就是对MYSQL_ROW的操作,然后使用void mysql_close(MYSQL *mysql);将mysql释放。
以下是上面用到的数据结构:
MYSQL句柄:
1 | typedef struct st_mysql |
MYSQL操作结果:
1 | typedef struct st_mysql_res { |
所有记录的信息,使用链表保存
1 | typedef char **MYSQL_ROW; /* return data as array of strings */ |