笨蛋学C++之 C++对数据库实现CRUD

笨蛋学C++ 之 C++对数据库实现CRUD

头文件

testcrud.h

c++ 复制代码
#pragma once
#include <mysql.h>
#include <iostream>
#include <vector>
#include <cstring> // 包含字符串操作相关的头文件
using namespace std;

typedef struct Test {
	int id;
	string name;
	Test(){}
	// 添加一个构造函数
	Test(int id, string name){
		this->id = id;
		this->name = name;
	}
}Test;

class testCrud{
	testCrud();
	~testCrud();
public:
	//创建单例模式
	static testCrud* getInstance() {
		static testCrud instance; // 创建一个静态实例
		return &instance;        // 返回这个静态实例的地址
	}
public:
	bool test_insert(Test &test);
	bool test_update(Test& test);
	bool test_delete(Test& test);
	vector<Test> test_select(string condition = "");

private:
	MYSQL* con;
	const char* host = "127.0.0.1";
	const char* user = "root";
	const char* password = "数据库密码";
	const char* database_name = "数据库名";
	const int port = 3306;
};

源文件

testcrud.cpp

c++ 复制代码
#include <iostream>
#include "test-crud.h"
using namespace std;

testCrud::testCrud() {
	// 设置链接
	con = mysql_init(NULL);
	// 设置编码
	mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");
	// 声明链接
	if (!mysql_real_connect(con, host, user, password, database_name, port, NULL, 0)) {
		cerr << "Failed to connect to database Error: " << mysql_error(con) << endl;
		exit(1);
	}
}
testCrud::~testCrud() {
	//关闭连接
	mysql_close(con);

}

//插入
bool testCrud::test_insert(Test& test) {
	char sql[1024];
	sprintf_s(sql, sizeof(sql), "INSERT INTO test (id,name) VALUES (%d,'%s')", test.id, test.name.c_str());

	if (mysql_query(con, sql)) {
		cerr << "Failed to insert to database Error: " << mysql_error(con) << endl;
		return false;
	}
	return true;
}
//修改
bool testCrud::test_update(Test& test) {
	char sql[1024];
	sprintf_s(sql, sizeof(sql), "UPDATE test SET name = '%s' WHERE id = %d", test.name.c_str(),test.id);

	if (mysql_query(con, sql)) {
		cerr << "Failed to update to database Error: " << mysql_error(con) << endl;
		return false;
	}
	return true;
}
//删除
bool testCrud::test_delete(Test& test) {
	char sql[1024];
	sprintf_s(sql, sizeof(sql), "DELETE FROM test WHERE id = %d",test.id);

	if (mysql_query(con, sql)) {
		cerr << "Failed to delete to database Error: " << mysql_error(con) << endl;
		return false;
	}
	return true;
}
//查询
vector<Test> testCrud::test_select(string condition) {

	vector<Test> testList;
	char sql[1024];
	//若condition为空,查出所有的数据
	sprintf_s(sql, sizeof(sql), "SELECT * FROM test %s", condition.c_str());

	if (mysql_query(con, sql)) {
		cerr << "Failed to select to database Error: " << mysql_error(con) << endl;
		return {};
	}
	MYSQL_RES* res = mysql_store_result(con);

	MYSQL_ROW row;
	while ((row = mysql_fetch_row(res))) {
		Test test;
		test.id = atoi(row[0]);
		test.name = atoi(row[1]);

		testList.push_back(test);
	}
	return vector<Test>();
}

main.cpp

c++ 复制代码
#include <mysql.h>
#include <iostream>
#include <cstring> // 包含字符串操作相关的头文件

#include "test-crud.h"
using namespace std;

int main(void) {
    Test test(4, "王九");
    testCrud::getInstance()->test_update(test); // 调用 update_test 方法
    return 0;
}
相关推荐
邓工说电28 分钟前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技
xh didida44 分钟前
Linux -- 基础IO
linux·服务器·开发语言·c++
adinnet20261 小时前
企业微调大模型(Fine-tuning):先吃透 RAG 还是先训自己的模型
大数据·数据库
垆边人似月.1 小时前
华为机试题 :两数之和
c++·算法·华为
个 人 练 习 生1 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
垆边人似月.1 小时前
华为机试题 :有效的括号
c++·算法·华为
坤坤子吖1 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
上位机妹子2 小时前
EF Core 两种继承映射:每层次一张表(TPH)与每类型一张表(TPT)
数据库·c#·.netcore·ef core
小马同学-2 小时前
Redis消息队列与客户端编程
数据库·redis
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结