Win10在vs2019使用C++操作mysql数据库(2)代码实现

配置过程

https://blog.csdn.net/qq_43656233/article/details/105224204

Mysql数据库

在这里插入图片描述
在这里插入图片描述

连接数据库、释放资源

连接数据库:

bool ConnectDatabase() // 连接数据库
{
	mysql_init(&mysql);  //连接mysql数据库,初始化
	if (!(mysql_real_connect(&mysql, "localhost", "root", "******", "test", 3307, NULL, 0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
	{
		cout << "连接数据库失败:" << mysql_error(&mysql) << endl;
		return false; // 连接失败
	}
	else
	{
		cout << "连接成功..." << endl;
		return true; // 连接成功
	}
}

释放资源:

void FreeConnect() // 释放资源
{
	cout << "释放数据库资源..." << endl;
	mysql_free_result(res);
	mysql_close(&mysql);
}

查询数据

其实所有的数据库操作都是先写个sql语句,然后用mysql_query(&mysql,query)来完成,包括创建数据库或表,增删改查

查询方式1
bool QueryDatabase1()
{
	sprintf_s(sql, "select * from user");
	mysql_query(&mysql, "set names gbk"); // 设置编码格式
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "查询失败:"<< mysql_error(&mysql) << endl;
		return false; // 查询失败
	}
	else
	{
		cout << "查询成功..." << endl; // 查询成功
	}
	if (!(res = mysql_store_result(&mysql))) // 获取结果集
	{
		cout << "查询对象失败:" << mysql_error(&mysql) << endl;
		return false; // 查询对象失败
	}
	cout << "数据行数:" << mysql_affected_rows(&mysql) << endl; // 打印数据行数
	char* str_field[32]; // 定义一个字符串数组存储字段信息
	for (int i = 0; i < 4; i++) // 在已知字段数量的情况下获取字段名
	{
		str_field[i] = mysql_fetch_field(res)->name;
	}
	for (int i = 0; i < 4; i++) // 输出查询信息
	{
		cout << setw(10) << str_field[i] << " ";
	}
	cout << endl;
	while (column = mysql_fetch_row(res)) // 在已知字段数量情况下,获取并打印下一行
	{
		cout << setw(10) << column[0] << " ";
		cout << setw(10) << column[1] << " ";
		cout << setw(10) << column[2] << " ";
		cout << setw(10) << column[3] << endl;
	}
	return true; // 查询成功
}
查询方式2
bool QueryDatabase2()
{
	mysql_query(&mysql, "set names gbk");
	if (mysql_query(&mysql, "select * from user")) // 执行SQL语句
	{
		cout << "查询失败:" << mysql_error(&mysql) << endl;
		return false; // 查询失败
	}
	else
	{
		cout << "查询成功..." << endl;
	}
	res = mysql_store_result(&mysql);
	cout << "数据行数:"<< mysql_affected_rows(&mysql) << endl; // 打印数据行数
	for (int i = 0; fd = mysql_fetch_field(res); i++)
	{
		strcpy_s(field[i], fd->name); // 获取字段名
	}
	int j = mysql_num_fields(res); // 获取列数
	for (int i = 0; i < j; i++) // 打印字段
	{
		cout << setw(10) << field[i] << " ";
	}
	cout << endl;
	while (column = mysql_fetch_row(res))
	{
		for (int i = 0; i < j; i++)
		{
			cout << setw(10) << column[i] << " ";
		}
		cout << endl;
	}
	return true; // 查询成功
}

插入数据

bool InsertData()
{
	sprintf_s(sql, "insert into user values (6, 'lily', '666','lily@sina.cn');"); // 也可以控制台手动输入sql语句
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "插入失败:" << mysql_error(&mysql) << endl;
		return false;
	}
	else
	{
		cout << "插入成功..." << endl;
		return true;
	}
}

修改数据

bool ModifyData()
{
	sprintf_s(sql, "update user set email='lesk@163.com' where name='lesk'"); // 也可以控制台手动输入sql语句
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "修改失败:" << mysql_error(&mysql) << endl;
		return false;
	}
	else
	{
		cout << "修改成功..." << endl;
		return true;
	}
}

删除数据

bool DeleteData()
{
	sprintf_s(sql, "delete from user where id=6;");
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "删除失败:" << mysql_error(&mysql) << endl;
		return false;
	}
	else
	{
		cout << "删除成功..." << endl;
		return true;
	}
}

完整代码

#include <WinSock.h>  //一定要包含这个,或者winsock2.h
#include "mysql.h"    //引入mysql头文件(一种方式是在vc目录里面设置,一种是文件夹拷到工程目录,然后这样包含)
#include <Windows.h>
#include <iostream>
#include<iomanip>
using namespace std;
//包含附加依赖项,也可以在工程--属性里面设置
#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"libmysql.lib")
MYSQL mysql; // mysql连接
MYSQL_FIELD* fd; // 字段列数组
char field[32][32]; // 存字段名二维数组
MYSQL_RES* res; // 这个结构代表返回行的一个查询结果集
MYSQL_ROW column; // 一个行数据的类型安全(type-safe)的表示,表示数据行的列
char sql[150]; // sql语句
bool ConnectDatabase(); // 连接数据库
void FreeConnect(); // 释放资源
bool QueryDatabase1(); // 查询1
bool QueryDatabase2(); // 查询2
bool InsertData(); // 插入数据
bool ModifyData(); // 修改数据
bool DeleteData(); // 删除数据
int main(int argc, char** argv)
{
	ConnectDatabase();
	QueryDatabase1();
	InsertData();
	QueryDatabase2();
	ModifyData();
	QueryDatabase2();
	DeleteData();
	QueryDatabase2();
	FreeConnect();
	system("pause");
	return 0;
}
bool ConnectDatabase() // 连接数据库
{
	mysql_init(&mysql);  //连接mysql数据库,初始化
	if (!(mysql_real_connect(&mysql, "localhost", "root", "Qwe1244204317", "test", 3307, NULL, 0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
	{
		cout << "连接数据库失败:" << mysql_error(&mysql) << endl;
		return false; // 连接失败
	}
	else
	{
		cout << "连接成功..." << endl;
		return true; // 连接成功
	}
}
void FreeConnect() // 释放资源
{
	cout << "释放数据库资源..." << endl;
	mysql_free_result(res);
	mysql_close(&mysql);
}
bool QueryDatabase1()
{
	sprintf_s(sql, "select * from user");
	mysql_query(&mysql, "set names gbk"); // 设置编码格式
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "查询失败:"<< mysql_error(&mysql) << endl;
		return false; // 查询失败
	}
	else
	{
		cout << "查询成功..." << endl; // 查询成功
	}
	if (!(res = mysql_store_result(&mysql))) // 获取结果集
	{
		cout << "查询对象失败:" << mysql_error(&mysql) << endl;
		return false; // 查询对象失败
	}
	cout << "数据行数:" << mysql_affected_rows(&mysql) << endl; // 打印数据行数
	char* str_field[32]; // 定义一个字符串数组存储字段信息
	for (int i = 0; i < 4; i++) // 在已知字段数量的情况下获取字段名
	{
		str_field[i] = mysql_fetch_field(res)->name;
	}
	for (int i = 0; i < 4; i++) // 输出查询信息
	{
		cout << setw(10) << str_field[i] << " ";
	}
	cout << endl;
	while (column = mysql_fetch_row(res)) // 在已知字段数量情况下,获取并打印下一行
	{
		cout << setw(10) << column[0] << " ";
		cout << setw(10) << column[1] << " ";
		cout << setw(10) << column[2] << " ";
		cout << setw(10) << column[3] << endl;
	}
	return true; // 查询成功
}
bool QueryDatabase2()
{
	mysql_query(&mysql, "set names gbk");
	if (mysql_query(&mysql, "select * from user")) // 执行SQL语句
	{
		cout << "查询失败:" << mysql_error(&mysql) << endl;
		return false; // 查询失败
	}
	else
	{
		cout << "查询成功..." << endl;
	}
	res = mysql_store_result(&mysql);
	cout << "数据行数:"<< mysql_affected_rows(&mysql) << endl; // 打印数据行数
	for (int i = 0; fd = mysql_fetch_field(res); i++)
	{
		strcpy_s(field[i], fd->name); // 获取字段名
	}
	int j = mysql_num_fields(res); // 获取列数
	for (int i = 0; i < j; i++) // 打印字段
	{
		cout << setw(10) << field[i] << " ";
	}
	cout << endl;
	while (column = mysql_fetch_row(res))
	{
		for (int i = 0; i < j; i++)
		{
			cout << setw(10) << column[i] << " ";
		}
		cout << endl;
	}
	return true; // 查询成功
}
bool InsertData()
{
	sprintf_s(sql, "insert into user values (6, 'lily', '666','lily@sina.cn');"); // 也可以控制台手动输入sql语句
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "插入失败:" << mysql_error(&mysql) << endl;
		return false;
	}
	else
	{
		cout << "插入成功..." << endl;
		return true;
	}
}
bool ModifyData()
{
	sprintf_s(sql, "update user set email='lesk@163.com' where name='lesk'"); // 也可以控制台手动输入sql语句
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "修改失败:" << mysql_error(&mysql) << endl;
		return false;
	}
	else
	{
		cout << "修改成功..." << endl;
		return true;
	}
}
bool DeleteData()
{
	sprintf_s(sql, "delete from user where id=6;");
	if (mysql_query(&mysql, sql)) // 执行SQL语句
	{
		cout << "删除失败:" << mysql_error(&mysql) << endl;
		return false;
	}
	else
	{
		cout << "删除成功..." << endl;
		return true;
	}
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值