1.参考
Mysql接口API相关函数详细使用说明——mysql_init,mysql_real_connect,mysql_query,mysql_close等相关
C++中使用MySQL数据库
- 安装mysql
- mysql句柄类介绍
- mysql_res类
- mysql_row类
- 函数API介绍
2.类介绍
2.1 MYSQL
句柄类,所有数据库相关的操作都会使用到这个句柄
2.2 MYSQL_RES
数据库的查询结果集类,用于存放调用查询函数之后的结果集
2.3 MYSQL_ROW
本质上是一个指向字符串数组的指针,也就是一个二级指针char**。
作用是从MYSQL_RES结果集中获得某一行的数据
3.接口函数
3.1 mysql_real_connect
连接数据库
MYSQL * STDCALL mysql_real_connect(
MYSQL *mysql, ///< 数据库句柄
const char *host, ///< 主机名
const char *user, ///< 用户名
const char *passwd,///< 密码
const char *db, ///< 数据库名
unsigned int port, ///< 端口号(MySQL为3306)
const char *unix_socket,///< unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制
unsigned long clientflag ///< clientflag–Mysql运行为ODBC数据库的标记,一般取0
);
连接失败返回0
3.2 mysql_real_query
查询,广义上的查询操作,实际上可以执行增删改查所有的操作,取决于传入的sql语句的内容。
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
// q指向mysql语句
3.3 mysql_store_result和mysql_use_result
获取查询结果集。
- mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;
- mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据
- 速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表
- 必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回。
故经常使用mysql_store_result。
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
3.4 mysql_fetch_row
读取结果集数据
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
参数为MYSQL_RES类型的结果集
3.代码示例
#include <iostream>
#include "mysql.h"
using namespace std;
int main(int argc, char *argv[])
{
///< 创建数据库句柄
MYSQL mysql;
///< 初始化句柄
mysql_init(&mysql);
///< 连接的数据库(句柄、主机名、用户名、密码、数据库名、端口号、socket指针、标记)
if (!mysql_real_connect(&mysql, "localhost", "root", "root", "test_mysql", 3306, nullptr, 0))
{
cout << "数据库连接失败" << mysql_errno(&mysql) << endl;
return -1;
}
cout << "数据库连接成功" << endl << endl;
///< 创建数据库回应结构体
MYSQL_RES *res = nullptr;
///< 创建存放结果的结构体
MYSQL_ROW row;
char sql[1024]{ 0 };
sprintf_s(sql, 1024, "select * from user_info");
///< 调用查询接口
if (mysql_real_query(&mysql, sql, (unsigned int)strlen(sql)))
{
cout << "查询失败" << ": " << mysql_errno(&mysql) << endl;
}
else{
cout << "查询成功" << endl << endl;
///< 装载结果集
res = mysql_store_result(&mysql);
if (nullptr == res){
cout << "装载数据失败" << ": " << mysql_errno(&mysql) << endl;
}
else{
///< 取出结果集中内容
while (row = mysql_fetch_row(res))
{
cout << row[0] << " " << row[1] << endl;
}
}
}
///< 释放结果集
mysql_free_result(res);
///< 关闭数据库连接
mysql_close(&mysql);
system("pause");
return 0;
}