C++连接MySQL数据库

5 篇文章 0 订阅
  1. 使用Navicat Premium 15在root用户目录下创建一个数据库ship_test,在ship_test下创建一个表ship01,设计数据库如下:
    在这里插入图片描述
  2. 暂时手动添加一些数据,方便连接数据库之后进行查询
    在这里插入图片描述
  3. 其次,配置当前项目的属性:
    3-1 . 常规->附加包含目录
    C:\Program Files\MySQL\MySQL Server 8.0\include;
    在这里插入图片描述
    3-2. 链接器->常规->附加库目录
    C:\Program Files\MySQL\MySQL Server 8.0\lib;

在这里插入图片描述
3-3. 链接器->输入->附加依赖项
添加libmysql.lib;
在这里插入图片描述

以上配置好之后即可使用与mysql数据库进行交互了

  1. 包含头文件#include<mysql.h>进行测试

  2. 出现问题:
    解决方法,找到C:\Program Files\MySQL\MySQL Server 8.0\lib下的libmysql.dll文件,将其复制到当前项目目录的\x64\Debug下,即:
    D:\vs++\CMSql\CMSql\x64\Debug

  3. 增删改查

  4. 代码集合

#include "pch.h"
#include <iostream>
#include<string>
#include<mysql.h>
using namespace std;

struct Student
{
	string name;
	int age;
	double score;
};

const char* host = "127.0.0.1";
const char* user = "root";
const char* psw = "123456";
const char* database_name = "ship_test";
const int port = 3306;

class MMSql
{
public:
	MMSql();
	~MMSql();
	MYSQL * getConnect();
	void updateID();
	void addToMySQL();
	void delToMySQL();
	void editToMySQL();
	void findToMySQL();
private:
	MYSQL *con;
};

MMSql::MMSql()
{
	//初始化mysql
	con = mysql_init(0);
	//VS的编译方式为GBK,因此设置MYSQL的编码方式为GBK
	mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");

	//连接数据库
	if (!mysql_real_connect(con, host, user, psw, database_name, port, NULL, 0))
	{
		cout << mysql_error(con) << endl;
	}

}

MMSql::~MMSql()
{
	mysql_close(this->getConnect());
}

MYSQL * MMSql::getConnect()
{
	return this->con;
}

void MMSql::updateID()
{
	/删除后重新整理id的编号/
	const char* query[] = {
		//更新id字段的值,重新从1开始编号
		"SET @new_id = 0;",
		"UPDATE ship01 SET id = @new_id:=@new_id+1;",
		//重新设置自增序列的最小值为1
		"ALTER TABLE ship01 AUTO_INCREMENT = 1;"
	};

	// 执行多条Query语句
	int num_queries = sizeof(query) / sizeof(query[0]);
	for (int i = 0; i < num_queries; ++i) {
		if (mysql_query(this->getConnect(), query[i]) != 0) {
			cout << "执行Query语句失败: " << mysql_error(this->getConnect()) << endl;
			return ;
		}
	}
}

void MMSql::addToMySQL()
{
	Student stu;
	stu.name = "xiaowang";
	stu.age = 79;
	stu.score = 88.9;
	/增
	//通过query插入数据
	string query = "INSERT INTO ship01 (`name`, age, score) VALUES ('" + stu.name + "', " + to_string(stu.age) + ", " + to_string(stu.score) + ")";

	if (mysql_query(this->getConnect(), query.c_str()) != 0)
	{
		cout << mysql_error(this->getConnect()) << endl;
		mysql_close(this->getConnect());
		return; // Exit the program with an error code
	}
	cout << "添加成功!" << "当前数据为:" << endl;
	this->updateID();//更新数据
	this->findToMySQL();
}

void MMSql::delToMySQL()
{
	///删
//通过query删除数据
	string query2 = "DELETE FROM ship01 WHERE id=2;";
	if (mysql_query(this->getConnect(), query2.c_str()) != 0)
	{
		cout << mysql_error(this->getConnect()) << endl;
		mysql_close(this->getConnect());
		return; // Exit the program with an error code
	}
	cout << "删除成功!" << "当前数据为:" << endl;
	this->updateID();//更新数据
	this->findToMySQL();
}

void MMSql::editToMySQL()
{
	///改
	int num1 = 39;
	string name1 = "fd";
	string query1 = "update ship01 set score=" + to_string(num1) + " where name = " +"'"+ name1 + "'";
	if (mysql_query(this->getConnect(), query1.c_str()) != 0)
	{
		cout << mysql_error(this->getConnect()) << endl;
		mysql_close(this->getConnect());
		return; // Exit the program with an error code
	}
	cout << "修改成功!" << "当前数据为:" << endl;
	this->findToMySQL();
}

void MMSql::findToMySQL()
{
	查//
//通过query查询数据
	mysql_query(this->getConnect(), "SELECT * FROM ship01");
	//使用res收集查询到的数据
	MYSQL_RES *res = mysql_store_result(this->getConnect());
	if (!res)
	{
		cout << mysql_error(this->getConnect()) << endl;
		mysql_close(this->getConnect());
		return; // Exit the program with an error code
	}
	//取得收集到的数据的行数(便于遍历)
	int num_fields = mysql_num_fields(res);
	//取每一行的数据,打印
	MYSQL_ROW row;
	while ((row = mysql_fetch_row(res)))
	{
		for (int i = 0; i < num_fields; i++)
		{
			cout << row[i] << " ";
		}
		cout << endl;
	}
	//释放收集的数据
	mysql_free_result(res);
}


int main()
{
	MMSql *mysq = new MMSql();
	mysq->addToMySQL();

	//mysq->editToMySQL();

	//mysq->delToMySQL();

	cout << "Hello World!\n";
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

colorful_stars

您是我见过全宇宙最可爱的人!

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

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

打赏作者

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

抵扣说明:

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

余额充值