Vs2017使用C++封装MySQL数据库--(超详细图文详解)

2023-05-16

文章目录

  • 1.Windows下安装MySQL数据库
  • 2.环境配置
  • 3.常用SQL语句
  • 4.数据库常用的API接口
  • 5.使用C++对这些常用API进行封装

1.Windows下安装MySQL数据库

1.1下载MySQL
因为我的电脑是64位,所以选择64位的MySQL进行下载
下载地址点击下载MySQL

在这里插入图片描述

在这里插入图片描述

1.2 安装MySQL
把MySQL文件夹放在自己想要放的位置,注意:路径名字最好不要有中文

1.3 生成data文件夹

以管理员身份运行cmd

进入E:\mysql-5.7.20-winx64\bin 下 放MySQL文件夹的位置

执行命令:mysqld --initialize-insecure --user=mysql 在E:\mysql-5.7.20-winx64目录下生成data目录

1.4启动服务

执行命令:net start mysql 启动mysql服务,若提示:服务名无效…看后面解决方法

1.5解决服务器服务失败问题

提示:服务名无效

解决方法:

执行命令:mysqld -install 即可(不需要my.ini配置文件 注意:网上写的很多需要my.ini配置文件,其实不需要my.ini配置文件也可以,我之前放置了my.ini文件,反而提示服务无法启动,把my.ini删除后启动成功了)

若出现下图,需要去资源管理器中把mysql进程全结束了,重新启动即可。
在这里插入图片描述
1.6 登录MySQL

登录mysql:(因为之前没设置密码,所以密码为空,不用输入密码,直接回车即可)

1.7 退出MySQL

mysql> quit

Bye

2.环境配置

建立vs工程,将mysql的库函数以及库文件加载到工程目录下,该文件一般在mysql的安装目录下
/>> 包含头文件目录: 项目–>属性—>C/C++选项—>常规—>附加包含目录
在这里插入图片描述

/>> 包含静态库文件: 项目—>属性—>链接—>常规—>附加库目录

在这里插入图片描述

/>> 将静态库引入到工程中:项目—>属性—>链接—>输入—>附加依赖项,添加:libmysql.lib;

在这里插入图片描述

头文件引入的顺序
引入文件的顺序需要注意 <mysql.h>一定要在<Winsock2.h>后引入

3.常用SQL语句

连接数据库:mysql -h 127.0.0.1 -P 3306 -u root -p 注意:-h 127.0.0.1 表示本地连接 -P 3306 MySQL的默认端 口号 -u root 代表用户 -p 后面输入密码
显示数据库: show databases;
选择数据库: use cashier;
显示当前数据库中所有表:show tables;
显示指定表结构:desc employee;
创建数据库: create database Cashier;

4.数据库常用的API接口

/>> 初始化数据库:mysql_init
/ >> 链接数据库:mysql_real_connect
/>> 执行sql语句:mysql_query
/ >> 断开连接: mysql_close
/ >> mysql_store_result: 检索完整的数据集到客户端
/ >> mysql_num_fields:结果集中总共有多少行
/ >> mysql_fetch_row(resource result): 从指定的结果集中获取一行数据并作为数组返回
/ >> mysql_free_result: 释放结果集

5.使用C++对这些常用API进行封装

头文件 MySQL.h

#pragma once
#include <iostream>
#include <WinSock2.h>
#include <mysql.h>
#include <string>
#include <vector>
using namespace std;
class MySQL {
public:
	MySQL();
	//连接mysql
	bool ConnectionMySql(const char* host,const char* user,const char* passward,const char* dbName,int port=3306);
	~MySQL();
	//增
	bool Insert(const string& strSQL);
	//删
	bool Delete(const string& strSQL);
	//改
	bool Update(const string& strSQL);
	size_t GetCount(const string& strSQL);
	vector<vector<string>> Select(const string& strSQL);

	//切换数据库
	bool SelectDB(const string& daName);
private:
	MYSQL* _mysql;
	string _dbName;
	vector<string> _tables;
};

CPP文件 MySQL.cpp

#include "MySQL.h"

MySQL::MySQL() {
	//初始化mysql
	_mysql = mysql_init(nullptr);
}

bool MySQL::ConnectionMySql(const char* host, const char* user, const char* passward, const char* dbName, int port) {
	//连接mysql
	if (!mysql_real_connect(_mysql, host, user, passward, dbName, port, NULL, 0)) {
		return false;
	}
	/*
		解决mysql中文显示乱码问题
	*/
	mysql_query(_mysql, "set names 'gbk'");

	return true;
}


bool MySQL::Insert(const string& strSql) {
	//执行sql语句
	if (mysql_query(_mysql, strSql.c_str())) {
		return false;
	}
	return true;
}

bool MySQL::Update(const string& strSQL) {
	if (mysql_query(_mysql, strSQL.c_str()))
		return false;
	return true;
}

vector<vector<string>> MySQL::Select(const string& sql) {
	vector<vector<string>> vRet;
	if (mysql_query(_mysql, sql.c_str())) {
		string vsRet(mysql_error(_mysql));
		return vRet;
	}
	//检查完整的数据集到客户端
	MYSQL_RES* res = mysql_store_result(_mysql);
	if (res == NULL) {
		return vRet;
	}
	//用来保存结果集中行的信息
	MYSQL_ROW rows;

	//结果集中总共多少行数据

	int num_fields = mysql_num_fields(res);
	while (rows = mysql_fetch_row(res)) {
		int i = 0;
		vector<string> vItem;
		vItem.resize(num_fields);
		for (i = 0; i < num_fields; ++i) {
			vItem[i] = rows[i];
		}
		vRet.push_back(vItem);
	}
	const char* str = mysql_error(_mysql);
	mysql_free_result(res);
	return vRet;
}

size_t MySQL::GetCount(const string& strSQL) {
	//指定SQL语句
	if (mysql_query(_mysql, strSQL.c_str())) {
		return 0;
	}
	//检索完整的数据集到客户端
	MYSQL_RES* res = mysql_store_result(_mysql);
	if (res == NULL) {
		return 0;
	}
	return mysql_num_fields(res);
}

bool MySQL::Delete(const string& strSQL) {
	if (mysql_query(_mysql, strSQL.c_str()))
		return false;
	return true;
}

MySQL::~MySQL() {
	mysql_close(_mysql);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vs2017使用C++封装MySQL数据库--(超详细图文详解) 的相关文章

  • 测验程序的 MySql 数据库设计

    我目前正在开发一个项目 主要是创建一个测验应用程序 它将能够进行包含 10 到 20 个问题的多项选择题或简答题的测验 它需要能够根据正确答案检查用户的答案 然后对用户的答案进行评分 稍后 我可能会实现一个后端功能来在线创建测验 但现在我将
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • Python Twisted 和数据库连接

    我们的工作项目包括同步应用程序 短期 和异步 Twisted 应用程序 长期 我们正在重构我们的数据库 并将构建一个 API 模块来解耦该模块中的所有 SQL 我想创建该 API 以便同步和异步应用程序都可以使用它 对于同步应用程序 我希望
  • django - 设置中带有数据库 url 的 MySQL 严格模式

    我在设置中使用数据库 URL 字符串 例如 DATABASES default mysql root localhost 3306 mydb 当我迁移时 我收到此警告 MySQL Strict Mode is not set for dat
  • 错误代码:1822(当数据类型匹配且具有复合键时)

    得到一个 错误代码 1822 添加外键约束失败 丢失的 引用表中约束 subject ibfk 1 的索引 注册 当尝试创建subject桌子 问题是 错误并没有出现在上一张表上student 数据类型相同 并且定义了主键 两者都会出现此错
  • PHP 数据库显示在具有不同锚标记的相同字段中

    我四处寻找 看看这是否可行 但却空手而归 首先 这是我的代码 div style display none div ul li li li li li li ul
  • 展平具有未知列数的子/父数据

    我正在努力寻找存储和表示 SQL MySQL DB 和 C Windows 表单中的数据的最佳方法 我的数据映射到如下所示的类时 public class Parent public string UniqueID get set Key
  • iPhone表情插入MySQL却变成空值

    我们正在开发一个 iPhone 应用程序 它将表情符号从 iPhone 发送到服务器端 PHP 并插入到 MySQL 表中 我正在做服务器端的工作 但是insert语句执行成功后 插入的值变成空了 我可以正确插入字段 varchar 的是文
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • php echo 不工作

    我的代码似乎不起作用 单选按钮出现 但旁边什么也没有 似乎 mysql fetch array 由于某种原因无法工作 因为我已经玩过代码并反复测试它以查找代码似乎遇到的位置出现问题并停止工作 有人可以告诉我出了什么问题吗 欢呼声我是新手 最
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • mysql中的按位移位

    如何在 MySQL 中进行按位移位 有没有具体的指令或者操作符 如果不是 如何最佳地模拟它 看一下按位运算符MySQL first http dev mysql com doc refman 5 0 en bit functions htm
  • MYSQL 查询 WHERE IN 与 OR

    我开发了一个使用 OR 查询的系统 SELECT FROM tableA JOIN tableB ON idA idB WHERE idA 1 OR idA 2 OR idA 3 OR idA 4 OR idA 5 OR idA 100 与
  • 如何在 PHP MYSQL 中将数据库表和每条记录从一台数据库服务器复制到另一台数据库服务器?>

    您好 我编写了一段代码 可以将数据库表从一个服务器复制到另一个服务器 但是每个表的记录没有复制 如何编写一个可以将表和每个记录从一个数据库服务器复制到另一个数据库服务器的函数 这是我的示例代码
  • MySQL - 查询合并具有相同 id 的行并保留该 id 的所有条目但作为一条记录

    我一直在处理本地保存在 wamp 服务器上的 mysql 数据库中的表 我正在使用 wamp 中的 phpmyadmin 区域来运行查询 我正在尝试获取数据来执行以下操作 谁能帮我制作一张包含许多植物记录的表格 植物可以有多个名称 表格将其
  • 删除 mysql 数据库中超过 3 个月的行的作业

    我们使用 mysql 服务器作为集中式日志系统 我希望有一项工作来定期删除 清理超过 3 个月的表条目 做这个的最好方式是什么 提前致谢 hinling 您是否在字段中存储项目的创建日期 If so DELETE FROM myTable
  • 尝试通过比较不同的表从 SQL 查询输出正确的值

    我对 SQL 非常陌生 需要有关如何使用正确的查询完成此任务的帮助 我有 2 张桌子需要使用 表 TB1 有 id Name 1 bob 2 blow 3 joe 表 TB2 有 compid property 1 bob 2 blow 我
  • MySQL 获取时间优化

    o我有一个包含 200 万个寄存器的表 但它很快就会增长得更多 基本上 该表包含具有相应描述符的图像的兴趣点 当我尝试执行选择在空间上靠近查询点的点的查询时 总执行时间花费太长 更准确地说 持续时间 获取 0 484 秒 27 441 秒
  • Mac OS X Yosemite/El Capitan 上自动启动 MySQL 服务器

    我想在启动时自动启动 MySQL 服务器 这在小牛队是可能的 但在优胜美地似乎不起作用 edit 似乎这也适用于 El Capitan dcc 非常接近 这是 MySQL 在 Yosemite 上再次自动启动的方式 The com mysq
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM

随机推荐

  • Qemu使用心得

    使用Qemu的心得体会如下 xff1a xff08 1 xff09 在QEMU源码中增加自己的 c实现 xff0c 编译后出现很多个错误如 xff1a error storage class specified for parameter
  • 转载:malloc和free底层实现

    转载 xff1a malloc和free底层实现 内存管理内幕 Linux内存管理 xff1a Malloc 本文引用了下面这篇文章 xff0c 读完下面 xff0c 应该读下上面两篇文章 xff0c 其中 xff0c 内存管理内幕 提供了
  • qemu tcg代码执行流程

    转自 xff1a http blog csdn net alloc7 article details 7719823 一 qemu简介 qemu是使用动态二进制翻译的cpu模拟器 xff0c 它支持两种运行模式 xff1a 全系统模拟和用户
  • c语言如何调用c++(本文从qemu开发中总结)

    背景 xff1a 有时候一个工程中有c语言编写的代码 c xff0c 也有c 43 43 cpp 编写的 xff0c 分别用 xff43 语言编译器 xff08 这里指 xff47 xff43 xff43 xff09 和 xff43 xff
  • c++常错语法

    1 new T 代表创建一个T类的对象指针 xff0c new T 标识创建T类对象数组指针 2 template模板类只能把成员函数都定义在 h中 xff0c 分开 h和 cpp会报链接错误 3 类A 的成员变量包含B的对象B b xff
  • UEFI EDK2开发环境设置关键点/修改环境变量

    1 问题描述 Linux下当修改了已经编译过的EDK2工程顶层路径后 进入工程顶层路径source edksetup sh会报错 2 解决步骤 有一个隐藏问题非常容易被忽视 那就是EDK2工程的环境变量可能还是原来的旧的 这时候 1 进入工
  • linux静态库.a使用常见错误

    在linux中如果一个程序需要用到 a 有以下几点需要注意 1 如果x o与y o中用到了静态xx a中的函数 不能用gcc xx a o test x o y o这种方式编译 会提示那些函数undefined 正确的做法是gcc o te
  • C/C++多线程常见问题

    1 问题 1 1 创建线程后是否立马开始并行执行 答 主线程创建了子线程之后 后者并不是立即就开始运行了 至少在Linux操作系统下 1 子线程和主线程运行在一个core上 那还需要等待主线程交出core控制权 可能是时间片耗尽 2 子线程
  • 2020 年百度之星·程序设计大赛 - 初赛二 题解

    废话 丑话说在前头 xff0c T8我不会 xff08 没错是指我会出丑 xff09 T1 既然要玩尽可能多轮 xff0c 那么每轮投入的钱就要最少 xff0c 也就是 m m m 元 xff0c 那么可以算出每轮游戏会亏损
  • QEMU内存管理

    QEMU内存管理 1 QEMU中管理的Memory有 xff1a 普通的RAM MMIO 内存控制器 将物理内存动态的映射到不同的虚拟地址空间 2 QEMU的Memory是以一个MemoryRegin为节点组成的非循环图的形式组织的 叶子节
  • Matlab实现基于二维伽马函数的光照不均匀图像自适应校正算法

    Matlab程序 xff1a 基于二维伽马函数的光照不均匀图像自适应校正算法 clc close all tic im 61 imread 39 你的图片 jpg 39 figure imshow im title 39 原图 39 h s
  • SCI回复评审意见模板

    一般反馈回来修改时 xff0c 要给编辑重新写一封cover letter xff0c 表示尊重与感谢 xff0c 范文如下 句式大家可以依照自己的习惯表达修改 xff0c 多参考他人经验 xff09 Dear XX xff08 给你回信的
  • 毕业快乐 —— 写于2020年3月13日

    很久没有经营这个博客了 今天来写点什么罢 2020的春天 xff0c 由于猝不及防的疫情 xff0c 参加了一场特殊的毕业答辩 线上答辩形式 没有西装和鲜花 xff0c 似乎缺少了一些仪式感 但毕业似乎真真切切就是一件水到渠成的事情 xff
  • Mac连上WIFI但是无法上网的3种解决方案

    一般我们最先会认为是DNS问题 xff0c 你可以试下用ip访问一个服务器 xff08 网站 xff09 看下行不行 xff0c 如果也不行那就应该不是DNS的问题了 或者改变一下DNS xff0c 如114 xff0c 或者自己内网要求的
  • 简单粗暴理解支持向量机(SVM)及其MATLAB实例

    目录 SVM概述 SVM的改进 xff1a 解决回归拟合问题的SVR 多分类的SVM QP求解 SVM的MATLAB实现 xff1a Libsvm 实例 用SVM分类 实例 用SVM回归 SVM概述 SVM已经是非常流行 大家都有所耳闻的技
  • 极限学习机(Extreme Learning Machine, ELM)原理详解和MATLAB实现

    目录 引言 极限学习机原理 MATLAB中重点函数解读 极限学习机的MATLAB实践 引言 极限学习机不是一个新的东西 xff0c 只是在算法 xff08 方法 xff09 上有新的内容 在神经网络结构上 xff0c 就是一个前向传播的神经
  • 粒子群优化算法(PSO)简介及MATLAB实现

    目录 粒子群优化算法概述 PSO算法步骤 PSO xff08 粒子群优化算法 xff09 与GA xff08 遗传算法 xff09 对比 PSO的MATLAB实现 粒子群优化算法概述 粒子群优化 PSO particle swarm opt
  • 结构化概率模型

    机器学习的算法经常会涉及到在非常多的随机变量上的概率分布 通常 xff0c 这些概率分布涉及到的直接相互作用都是介于非常少的变量之间的 使用单个函数来描述整个联合概率分布是非常低效的 无论是计算上还是统计上 我们可以把概率分布分解成许多因子
  • Fuzzy C-Means(模糊C均值聚类)算法原理详解与python实现

    目录 模糊理论 Fuzzy C Means算法原理 算法步骤 python实现 参考资料 本文采用数据集为iris 将iris txt放在程序的同一文件夹下 请先自行下载好 模糊理论 模糊控制是自动化控制领域的一项经典方法 其原理则是模糊数
  • Vs2017使用C++封装MySQL数据库--(超详细图文详解)

    文章目录 1 Windows下安装MySQL数据库2 环境配置3 常用SQL语句4 数据库常用的API接口5 使用C 43 43 对这些常用API进行封装 1 Windows下安装MySQL数据库 1 1下载MySQL 因为我的电脑是64位