在C++程序中使用MYSQL数据库

1.参考

Mysql接口API相关函数详细使用说明——mysql_init,mysql_real_connect,mysql_query,mysql_close等相关
C++中使用MySQL数据库

  • 安装mysql
  • mysql句柄类介绍
  • mysql_res类
  • mysql_row类
  • 函数API介绍

利用C++对mysql数据库进行操作

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;
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值