当前位置: 首页 > news >正文

VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

这个是B站Up主:程序员程子青的视频 

C++封装Mysql增删改查操作_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1m24y1a79o/?p=6&spm_id_from=pageDriver&vd_source=a934d7fc6f47698a29dac90a922ba5a3安装mysql:mysql 下载和安装和修改MYSQL8.0 数据库存储文件的路径-CSDN博客

创建数据库和表:

C:\Users\heheda>mysql -u heheda -p
mysql> create database test;
mysql> show databases;
mysql> use test;
mysql> create table student(stuId int not null auto_increment primary key,stuName varchar(255) not null,className varchar(255) not null);
mysql> show tables;
mysql> insert into student values(3,'杰瑞','终极三班');
Query OK, 1 row affected (0.00 sec)

参考这篇文章:windows下使用vscode原生态配置c++链接mysql数据库:windows下使用vscode原生态配置c++链接mysql数据库_vscode 链接 lib库-CSDN博客

  • mysql下的include文件夹直接拷贝到项目目录下【或者只拷贝include中的mysql.h文件】方便引用mysql.h头文件
  •  拷贝libmysql.dll 、libmysql.lib、mysqlclient.lib文件直接放在工程目录下因为这里可执行文件在其所在目录下直接寻找动态链接源文件
  •  当cmake构建好项目之后,我们可以把libmysql.dll 、libmysql.lib文件直接放在bin目录下

  • StudentManager.h
#pragma once
#include <mysql.h>
#include <iostream>
#include <string>
#include <vector>using namespace std;typedef struct student {int stuId;string stuName;string className;
}Student;class StudentManager {
private:StudentManager();~StudentManager();
public:static StudentManager* GetInstance() { //单例修改static StudentManager StudentManager;return &StudentManager;}
public:// 增上改查bool insertStu(Student& stu);bool updateStu(Student& stu);bool deleteStu(int stuId);vector<Student> queryStu(string condition = "");
private:MYSQL* conn;const char* host = "127.0.0.1";const char* user = "heheda";const char* pwd = "123456";const char* dbName = "test";const unsigned short port = 3306;const char* tableName = "student";
};
  • StudentManager.cpp
#include "StudentManager.h"StudentManager::StudentManager() {conn = mysql_init(NULL);// 设置字符编码mysql_options(conn, MYSQL_SET_CHARSET_NAME, "GBK");if(!mysql_real_connect(conn,host,user,pwd,dbName,port,NULL,0)) {std::cout<<"Failed to connect"<<std::endl;exit(1);}
}StudentManager::~StudentManager() {mysql_close(conn);
}bool StudentManager::insertStu(Student &stu) {char sql[1024];sprintf(sql,"insert into student (stuId,stuName,className) values(%d,'%s','%s')",stu.stuId,stu.stuName.c_str(),stu.className.c_str());// mysql_query成功返回0,失败返回非0if(mysql_query(conn,sql)) {fprintf(stderr,"Failed to insert data into database!!!Error:%s\n",mysql_error(conn));return false;}return true;
}// c_str():生成一个const char*指针,指向以空字符终止的数组
bool StudentManager::updateStu(Student &stu) {char sql[1024];sprintf(sql,"UPDATE student SET stuName = '%s',className = '%s'""where stuId = %d",stu.stuName.c_str(),stu.className.c_str(),stu.stuId);if(mysql_query(conn,sql)) {fprintf(stderr,"Failed to update data!!!Error:%s\n",mysql_error(conn));return false;}return true;
}bool StudentManager::deleteStu(int stuId) {char sql[1024];sprintf(sql,"DELETE FROM student WHERE stuId = '%d'",stuId);if(mysql_query(conn,sql)) {fprintf(stderr,"Failed to delete data!!!Error:%s\n",mysql_error(conn));return false;}return true;
}vector<Student> StudentManager::queryStu(string condition) {vector<Student> stuList;char sql[1024];sprintf(sql,"SELECT * FROM student %s",condition.c_str());if(mysql_query(conn,sql)) {fprintf(stderr,"Failed to select data!!!Error:%s\n",mysql_error(conn));return {};}MYSQL_RES* res = mysql_store_result(conn);MYSQL_ROW row;while((row = mysql_fetch_row(res))) {Student stu;stu.stuId = atoi(row[0]);stu.stuName = row[1];stu.className = row[2];stuList.push_back(stu);}return stuList;
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(test)
include_directories(${PROJECT_SOURCE_DIR}/include)set(StudentManager ${PROJECT_SOURCE_DIR}/StudentManager) 
include_directories(${StudentManager}/include)aux_source_directory(${StudentManager}/src StudentManagerSrc)link_directories(${PROJECT_SOURCE_DIR}/lib)
add_executable(app test.cpp ${StudentManagerSrc})
target_link_libraries(app mysql)# 指定输出的路径
set(HOME ${PROJECT_SOURCE_DIR}) # 定义一个变量用于存储一个绝对路径
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin) # 将拼接好的路径值设置给 EXECUTABLE_OUTPUT_PATH 变量
  • test.cpp
#include "StudentManager.h"
#include <mysql.h>int main() {Student stu{3,"杰瑞","猫鼠一班"};// StudentManager::GetInstance()->insertStu(stu);// StudentManager::GetInstance()->deleteStu(3);StudentManager::GetInstance()->updateStu(stu);char condition[1024];sprintf(condition,"where className = '%s'","终极一班");// sprintf(condition,"where stuId = %d",2);// string condition = string();vector<Student> ret= StudentManager::GetInstance()->queryStu(condition);for(auto& it:ret){std::cout<<"打印: ";cout<<it.stuId<<" "<<it.stuName<<" "<<it.className<<endl;}std::cout<<"I am heheda!"<<std::endl;return 0;
}

相关文章:

VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

这个是B站Up主&#xff1a;程序员程子青的视频 C封装Mysql增删改查操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1m24y1a79o/?p6&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3安装mysql:mysql 下载和安装和修改MYSQL8.0 数据库存储…...

HackTheBox - Medium - Linux - Ransom

Ransom 外部信息搜集 端口扫描 循例nmap Web枚举 /api/login 它似乎受nosql注入影响&#xff0c;我们能够登录成功 把返回的cookie丢到cookie editor&#xff0c;回到主页 zip是加密的 Foothold 我们可以得知加密类型是ZipCrypto 谷歌能够找到这篇文章&#xff0c;它将告诉我…...

柠檬微趣面试准备

简单介绍一下spring原理 Spring框架是一个开源的Java应用程序框架&#xff0c;它提供了广泛的基础设施支持&#xff0c;帮助开发者构建Java应用程序。Spring的设计原则包括依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;等&#xff0c;以促使代…...

uniapp嵌套webview,无法返回上一级?

uniapp嵌套webview&#xff0c;如何解决回退问题&#xff1f; 文章目录 uniapp嵌套webview&#xff0c;如何解决回退问题&#xff1f;遇到问题解决方式方式一方式二 场景&#xff1a; 进入首页&#xff0c;自动跳转第三方应用 遇到问题 在设备上运行时&#xff0c;无法回退上…...

【优先级队列 之 堆的实现】

文章目录 前言优先级队列 PriorityQueue优先队列的模拟实现 堆堆的储存方式堆的创建建堆的时间复杂度堆的插入与删除 总结 前言 优先级队列 PriorityQueue 概念&#xff1a;对列是先进先出的的数据结构&#xff0c;但有些情况&#xff0c;数据可能带有优先级&#xff0c;一般出…...

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的&#xff0c;是同一个作用&#xff0c;但是有两个不同写法。 用法一&#xff1a; //注意&#xff1a;这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二&#xff1a; watch:{xxx:(newVal,oldVal)>…...

openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert

文章目录 openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert概述笔记备注END openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert 概述 实验前置条件为 openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法 …...

小程序商城能不能自己开发?

在数字化时代&#xff0c;小程序商城已经成为商家拓展销售渠道、提升品牌影响力的重要工具。那么&#xff0c;商家能否自己动手开发小程序商城呢&#xff1f;答案是肯定的。接下来&#xff0c;以乔拓云为例&#xff0c;为大家详细介绍如何自己搭建小程序商城。 首先&#xff0c…...

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代&#xff0c;客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么&#xff0c;如何才能在这个信息爆炸的时代&#xff0c;让我们的服务方式更加个性化、多样化&#xff0c;从而提供更丰富…...

ERC20 解读

1.ERC20 什么叫做代币&#xff1f; 代币可以在以太坊中表示任何东西&#xff1a; 在线平台中的信誉积分游戏中一个角色的技能彩票卷金融资产类似于公司股份的资产像美元一样的法定货币一盎司黄金及更多... 以太坊的这种强大特点必须以强有力的标准来处理&#xff0c;对吗&a…...

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇&#xff1a; C#&#xff0c;入门教程(30)——扎好程序的笼子&#xff0c;错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令&#xff0c;绝对是天才设计。 编译程序的时候会发现&am…...

Java SE:面向对象(下)

1. static关键字 静态区的特点&#xff1a;静态区里面的每一样东西都是唯一有且仅有一个的&#xff0c;如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1&#xff0c;后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…...

搭建开源数据库中间件MyCat2-配置mysql数据库双主双从

mycat2官网&#xff1a;MyCat2 前言&#xff1a;mycat2下载地址无法访问&#xff0c;不知道是不是被DNS污染了&#xff0c;还是需要搭梯子访问&#xff0c;所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。 架构&#xff1a;双主双从 配置&#xf…...

Oracle 19c rac集群管理 -------- 集群启停操作过程

Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …...

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中&#xff0c;前端通过以下三种方式来与后端进行交互&#x1f31f; ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对&#xff0c;一般用doGet方法进行交互 代码如下 …...

【深蓝学院】移动机器人运动规划--第2章 基于搜索的路径规划--笔记

0. Outline 1. Graph Search Basis Configuration Space等概念 机器人配置: 指机器人位置和所有点的表示。 DOF: 指用于表示机器人配置所需的最小的实数坐标的数量n。 C-space: 包含机器人n维所有配置的空间。 在C-space中机器人的pose是一个点。 机器人在C-space中被表示为一…...

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令&#xff1a; docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…...

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟&#xff0c;引脚&#xff0c;将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…...

jdk17新特性——文本块(即多行的字符串)增强

目录 一、文本块(即多行的字符串)概述二、文本块(即多行的字符串)示例2.1、jdk17之前 多行字符串处理方式2.2、jdk17及以后版本 多行字符串处理方式2.3、注意事项 三、文本块(即多行的字符串)转义字符示例3.1、jdk17及以后版本 多行字符串的转义字符处理方式示例一3.2、jdk17及…...

阿里云ECS使用docker搭建mysql服务

目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器&#xff08;设置端口映射、目录映射&#xff09; 1.确保正确安装好docker 安装教程&#xff1a; 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...