C++连接使用MySQL

C++连接使用MySQL

    • 定义MySQLCon类
    • 初始化操作
    • 连接到MySQL服务器
    • 获取MySQL错误信息
    • C++中使用SQL语句
    • 关闭数据库
    • 示例主函数

定义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;
}

输出内容
C++连接使用MySQL_第1张图片

你可能感兴趣的:(mysql,c++)