C++는 데이터베이스의 추가, 삭제, 수정 및 쿼리 기능 데모를 구현합니다.

머리말

나는 최근에 한 회사에서 인턴을 했고 입사한 날 완료해야 할 두 개의 작은 데모를 받았습니다. 첫 번째는 C++를 사용하여 웹 프런트 엔드의 http 프로토콜 노출을 구현하는 것이었고, 다른 하나는 C++를 사용하여 데이터베이스 연결 및 해당 추가, 삭제, 수정 및 확인 기능 더 많은 이야기와 코드.

1. 준비조건

1.1데이터 테이블 생성

사용자 테이블 구조는 다음과 같습니다.

데이터 유형 필드 설명하다
정수 ID 일련번호
사용자 이름 사용자 이름
정수 비밀번호 비밀번호
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(18) NOT NULL,
  `password` int(18) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

1.2 구성 항목

1. 프로젝트 속성 열기
여기에 이미지 설명을 삽입하세요.
2. 포함 디렉터리를 편집하고 sdl 검사 끄기
3. Mysql의 포함 디렉터리 경로를 추가하고 확인을 클릭한 후 적용
여기에 이미지 설명을 삽입하세요.

2. 데이터베이스에 연결

2.1 UserManager.h 파일 생성

일부 상수와 메소드를 정의하고 선언하는 데 사용됩니다. 각 코드에는 다음과 같은 주석이 있습니다.

#pragma once //防止头文件多次加载
#include <mysql.h>//用于数据库连接
#include <iostream>//用于读写数据流
#include <string>//字符串
#include<vector>//vector容器

using namespace std;//标准命名空间

typedef struct User {
	int id;
	string username;
	int password;
}User;//映射数据表User的结构
class UserManager
{
	UserManager();//构造函数,用于创建实例化后的对象,默认调用
	~UserManager();//析构函数,用来销毁该实例化后的对象,由系统调用
public:
	static UserManager* GetInstance() { //单例模式
		static UserManager UserManager;
		return &UserManager;
	}
public: //定义增删改查的函数声明,其中&为引用符号,传入的是该对象的地址,便于直接操作该对象
	bool insert_user(User& user);
	bool delete_user(User& user);
	bool update_user(User& user);
	vector<User> query_user(string condition = "");
private://定义一些常量
	MYSQL* con;
	const char* host = "127.0.0.1";//主机IP地址
	const char* user = "root";//用户名
	const char* pw = "123456";//密码
	const char* database_name = "test";//数据库名称
	const int port = 3306;//端口号
};

2.2 UserManager.cpp 파일 생성

#include "UserManager.h" //引入头文件
using namespace std;//标准命名空间

//实现头文件中声明的构造函数
UserManager::UserManager() {
	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))
	{
		std::cout << "Failed to connect with database";
		exit(1);
	}
}
//实现头文件中声明的析构函数
UserManager::~UserManager() {
	mysql_close(con);
}
//增加用户
bool  UserManager::insert_user(User& user)
{
	char sql[8192];//声明字符数组
	sprintf_s(sql, "insert into user(id,username,password) values (%d,'%s',%d)", user.id, user.username.data(), user.password);//sql语句
	if (mysql_query(con, sql))//执行sql语句
	{
		fprintf(stderr, "Failed to insert data,Error:%s\n", mysql_error(con));
		return false;
	}
	return true;
}
//删除用户
bool UserManager::delete_user(User& user)
{
	char sql[8192];
	sprintf_s(sql, "	DELETE FROM  user WHERE id=%d", user.id);
	if (mysql_query(con, sql))
	{
		fprintf(stderr, "Failed to delete data,Error:%s\n", mysql_error(con));
		return false;
	}
	return true;
}
//修改用户
bool UserManager::update_user(User& user)
{
	char sql[8192];
	sprintf_s(sql, "	UPDATE user SET  username='%s',password=%d WHERE id=%d",
		user.username.data(), user.password,user.id);
	if (mysql_query(con, sql))
	{
		fprintf(stderr, "Failed to updata data,Error:%s\n", mysql_error(con));
		return false;
	}
	return true;

}
//查询用户
vector<User> UserManager::query_user(string condition)
{
	vector<User> userList;
	char sql[8192];
	sprintf(sql, "	SELECT * FROM user %s",condition.c_str());
	if (mysql_query(con, sql))
	{
		fprintf(stderr, "Failed to select data,Error:%s\n", mysql_error(con));
		return {};
	}
	MYSQL_RES* res = mysql_store_result(con);
	MYSQL_ROW row;
	while ((row = mysql_fetch_row(res)))
	{
		User user;
		user.id = atoi(row[0]);
		user.username = atoi(row[1]);
		user.password = atoi(row[2]);
		userList.push_back(user);
	}
	for (int i = 0; i < userList.size(); i++)
	{
		cout << userList[i].id << "," << userList[i].username << "," << userList[i].password << endl;
	}
	return userList;
}

3. 코드 실행

main.cpp 파일을 생성하고 테스트 코드는 다음과 같습니다.

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

int main() {
	//User的插入
	User user1{1,"测试",123};//实例化一个User对象
	UserManager::GetInstance()->insert_user(user1);//调用插入方法
}

4.소스코드

얻으려면 여기를 클릭하세요

추천

출처blog.csdn.net/qq_52431815/article/details/131696970