笨蛋学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;
}
相关推荐
此生决int6 分钟前
深入理解C++系列(19)——C++11(上)
开发语言·c++
其实防守也摸鱼15 分钟前
堆叠注入(Stacked Injection)详解
服务器·数据库·windows·https·ssl
郝学胜-神的一滴19 分钟前
C++20模板元编程 05:吃透变参模板,解锁编译期万能参数能力
服务器·开发语言·c++·windows·vscode
两点王爷9 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
两点王爷9 小时前
PostgreSQL 好用又独特的特性与空间函数
数据库
梦帮科技9 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
C++ 老炮儿的技术栈10 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
TDengine (老段)10 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
螺蛳粉 螺蛳粉13 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
I_belong_to_jesus15 小时前
std::unique_ptr成员函数用法
c++