C++连接使用MySQL

定义MySQLCon类

class MySQLCon
{
	MYSQL mysql;
public:
	int errornum;
	string errortext;
public:
	//初始化
	MySQLCon();
	//关闭数据库
	~MySQLCon();
	//链接数据库
	bool OpenConn(const char* host,const char* username,const char* pwd,const char* dbName,unsigned port=0);
	void GetErrorText();//获取错误文本
	void Close();//关闭数据库
	bool ExecuteSQL(const char* sql);//使用SQL语句,无法接收数据
	bool QureySQL(const char* sql, vector<vector<string>>& resultSet);//使用SQL语句并接收数据(select语句)
};

初始化操作

MySQLCon::MySQLCon()
{
	if (mysql_library_init(0, nullptr, nullptr)) 
	{
		cout << "CAPI初始化失败" << std::endl;
		getchar();
		exit(1);
	}
	if (mysql_init(&mysql)==nullptr)
	{
		cout << "初始化数据库变量失败" << std::endl;
		getchar();
		exit(1);
	}
	if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"))
	{
		cout << "设置连接选项失败" << std::endl;
		getchar();
		exit(1);
	}
}

连接到MySQL服务器

//参数分别为主机,用户名,密码,数据库名,端口号
bool MySQLCon::OpenConn(const char* host, const char* username, const char* pwd, const char* dbName, unsigned port)
{
	//连接数据库
	if (mysql_real_connect(&mysql, host, username, pwd, dbName, port, nullptr, 0)==nullptr)
	{
		cout << "连接到MySQL服务器失败" << std::endl;
		//获取错误文本
		GetErrorText();
		exit(1);
		return false;
	}
	return true;
	
}

获取MySQL错误信息

void MySQLCon::GetErrorText()
{
	//获取错误代码
	errornum = mysql_errno(&mysql);
	//获取错误文本
	errortext = mysql_error(&mysql);
	//打印错误代码
	cout << "error num: " << errornum << std::endl;
	//打印错误文本
	cout << "error text: " << errortext << std::endl;
	getchar();
}

C++中使用SQL语句

bool MySQLCon::ExecuteSQL(const char* sql)
{
	//使用SQL语句但无法接收数据
	if (mysql_real_query(&mysql, sql, strlen(sql)))
	{
		GetErrorText();
		return false;
	}
	return true;
}
bool MySQLCon::QureySQL(const char* sql, vector<vector<string>>& resultSet)
{
	//使用SQL语句并接收数据至vector容器
	if (mysql_real_query(&mysql, sql, strlen(sql)))
	{
		GetErrorText();
		return false;
	}
	//创建一个MYSQL结果集
	MYSQL_RES* result = mysql_store_result(&mysql);
	//获取行和列的总数
	unsigned int rows = mysql_num_rows(result);
	unsigned int cols = mysql_num_fields(result);
	//用于记录结果集中的一条数据
	MYSQL_ROW row;
	while (row = mysql_fetch_row(result))
	{
		//创建一个vector容器用于储存row中的数据
		vector<string> lineDate;
		for (int i = 0; i < cols; i++)
		{
			if (row[i])
			{
				//将row中每一列的数据存入lineDate中
				lineDate.push_back(row[i]);
			}
			else
			{
				lineDate.push_back("");
			}
		}
		//在resultSet中存入整行数据
		resultSet.push_back(lineDate);
	}
	//释放结果集
	mysql_free_result(result);
	return true;
}

关闭数据库


void MySQLCon::Close()
{
	mysql_close(&mysql);
}
MySQLCon::~MySQLCon()
{
	Close();
	mysql_library_end();
}

示例主函数

int main()
{
	MySQLCon c_apiconn;
	c_apiconn.OpenConn("127.0.0.1", "root", "136119", "fancy");
	string sql = "use fancy;";
	vector<vector<string>> data;
	c_apiconn.ExecuteSQL(sql.c_str());
	sql = "select * from fancy.info;";
	c_apiconn.QureySQL(sql.c_str(), data);
	for (int i = 0; i < data.size(); i++)
	{
		for (int j = 0; j < data[i].size(); j++)
		{
			cout << data[i][j] << "\t";
		}
		cout << endl;
	}
	return 0;
}

输出内容
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fantety

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值