C++增删改查+MySQL
右键项目属性
点击编辑
选择mysql安装目录的include文件夹
包含了头文件之后包含库文件
点击编辑
在mysql安装路径下面选择
选择编辑之后添加
看这个文件下面有没有这个输入的文件依赖
有就代表成功连接数据库
创建数据库:
create database student_manager;
使用数据库:
use student_manager
创建表:
create table student(student_id int not null auto_increment primary key,student_name varchar(255) not null,class_id varchar(255) not null);
插入数据:
insert into student values(1000,'张三','软件工程-班');
详细环境配置:
https://blog.csdn.net/zapachep/article/details/121547648
复制到当前文件下:
源代码:测试一下连接步骤
#include<mysql.h>
#include<iostream>
#include<string>
using namespace std;
const char* host = "127.0.0.1";
const char* user = "root";
const char* pw = "mxz101305";
const char* database_name = "student_manager";
const int port = 3306;
typedef struct Student {
int student_id;
string student_name;
string class_id;
}Student;
int main() {
//初始化,连接mysql,
MYSQL* con = mysql_init(NULL);
//设置编码,以防止乱码
mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");
//连接
if (!mysql_real_connect(con, host, user, pw, database_name, port, NULL, 0)) {
fprintf(stderr, "数据库连接错误:%s\n", mysql_error(con));
return -1;
}
Student stu{ 1111,"吴彦祖", "软件三班" };
char sql[1024];
sprintf_s(sql, "insert into student(student_id,student_name,class_id) values(%d,'%s','%s')", stu.student_id, stu.student_name.c_str(), stu.class_id.c_str());
//失败为1,成功为0
if (mysql_query(con, sql)) {
fprintf(stderr, "操作失败:%s\n", mysql_error(con));
return -1;
}
//关闭连接
mysql_close(con);
return 0;
}
完整的数据库增删改查操作:
头文件
#pragma once
#include<mysql.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef struct Student {
int student_id;
string student_name;
string class_id;
}Student;
class StudentManager
{
StudentManager();
~StudentManager();
public://单例模式,限制只有一个连接
static StudentManager* GetInstance() {
static StudentManager studentManager;
return &studentManager;
}
public:
bool insert_student(Student& t);
bool update_student(Student& t);
bool delete_student(int student_id);
vector<Student> get_student(string condition = "");
private:
MYSQL* con;
const char* host = "127.0.0.1";
const char* user = "root";
const char* pw = "mxz101305";
const char* database_name = "student_manager";
const int port = 3306;
};
#include "StudentManager.h"
StudentManager::StudentManager()
{
con = mysql_init(NULL);
//设置编码,以防止乱码
mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");
//连接
if (!mysql_real_connect(con, host, user, pw, database_name, port, NULL, 0)) {
fprintf(stderr, "数据库连接错误:%s\n", mysql_error(con));
exit(1);
}
}
StudentManager::~StudentManager()
{
mysql_close(con);
}
bool StudentManager::insert_student(Student& stu)
{
char sql[1024];
sprintf_s(sql, "insert into student(student_id,student_name,class_id) values(%d,'%s','%s')", stu.student_id, stu.student_name.c_str(), stu.class_id.c_str());
if (mysql_query(con, sql)) {
fprintf(stderr, "增加操作失败:%s\n", mysql_error(con));
return false;
}
return true;
}
bool StudentManager::update_student(Student& stu)
{
char sql[1024];
sprintf_s(sql, "UPDATE student SET student_name='%s',class_id='%s'""where student_id=%d",
stu.student_name.c_str(), stu.class_id.c_str(), stu.student_id);
if (mysql_query(con, sql)) {
fprintf(stderr, "更新操作失败:%s\n", mysql_error(con));
return false;
}
return true;
}
bool StudentManager::delete_student(int student_id)
{
char sql[1024];
sprintf_s(sql, "DELETE FROM student where student_id=%d",student_id);
if (mysql_query(con, sql)) {
fprintf(stderr, "删除操作失败:%s\n", mysql_error(con));
return false;
}
return true;
}
vector<Student> StudentManager::get_student(string condition)
{
vector<Student> stuList;
char sql[1024];
sprintf_s(sql, "SELECT * FROM student %s",condition.c_str());
if (mysql_query(con, sql)) {
fprintf(stderr, "查询操作失败:%s\n", mysql_error(con));
return {};
}
MYSQL_RES* res = mysql_store_result(con);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
Student stu;
stu.student_id = atoi(row[0]);
stu.student_name = row[1];
stu.class_id = row[2];
stuList.push_back(stu);
}
return stuList;
}
验证代码效果:
#include "StudentManager.h"
int main() {
/*增删改操作
Student stu{ 11114, "海燕12", "数学3班" };
StudentManager::GetInstance()->delete_student(11114);*/
vector<Student> ret = StudentManager::GetInstance()->get_student();
for (auto& t : ret) {
cout << t.student_id << "," << t.student_name << "," << t.class_id << endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现