C++中使用MySQL数据库
文章目录
- 1. 安装MySQL
- 2. 拷贝include和lib文件夹到C++工程中
- 3. 正式使用数据库
- 3.1 范例
- 3.2 类介绍
- 3.2.1 MYSQL句柄类
- 3.2.2 MYSQL_RES查询结果集
- 3.2.3 MYSQL_ROW获取单行内容
- 3.3 重要接口函数介绍
- 3.3.1 连接数据库
- 3.3.2 查询
- 3.3.3 获取查询结果集
- 3.3.4 读取结果集数据
- 4. 结果演示
- 参考链接
因为项目需要使用C++的方式调用MySQL数据库,因为以前使用的都是Qt的数据库类,因此在网上查阅相关资料后,特整理一下使用方法。(下方的“类”和“结构体”我统称为类,个人习惯)
1. 安装MySQL
这一步就不多说了,网上教程很多,自行查阅即可。
2. 拷贝include和lib文件夹到C++工程中
打开MySQL的安装目录,拷贝include和lib目录至C++工程,然后在项目中添加包含路径和使用到的附加依赖项。
3. 正式使用数据库
3.1 范例
话不多说,直接上源码:
#include <iostream>
#include "mysql.h"using namespace std;int main(int argc, char *argv[])
{///< 创建数据库句柄MYSQL mysql;//MYSQL *mysql = mysql_init(nullptr);///< 初始化句柄mysql_init(&mysql);///< 连接的数据库(句柄、主机名、用户名、密码、数据库名、端口号、socket指针、标记)if (!mysql_real_connect(&mysql, "localhost", "root", "root", "test_mysql", 3306, nullptr, 0)){cout << "数据库连接失败" << mysql_errno(&mysql) << endl;return -1;}cout << "数据库连接成功" << endl << endl;///< 创建数据库回应结构体MYSQL_RES *res = nullptr;///< 创建存放结果的结构体MYSQL_ROW row;char sql[1024]{ 0 };sprintf_s(sql, 1024, "select * from user_info");///< 调用查询接口if (mysql_real_query(&mysql, sql, (unsigned int)strlen(sql))){cout << "查询失败" << ": " << mysql_errno(&mysql) << endl;}else{cout << "查询成功" << endl << endl;///< 装载结果集res = mysql_store_result(&mysql);if (nullptr == res){cout << "装载数据失败" << ": " << mysql_errno(&mysql) << endl;}else{///< 取出结果集中内容while (row = mysql_fetch_row(res)){cout << row[0] << " " << row[1] << endl;}}}///< 释放结果集mysql_free_result(res);///< 关闭数据库连接mysql_close(&mysql);system("pause");return 0;
}
因为使用到的函数接口不多,整体过程比较简单,下面介绍使用到的结构体和函数。
3.2 类介绍
3.2.1 MYSQL句柄类
MYSQL mysql;
MYSQL是数据库句柄类,所有数据库相关的操作都会使用到这个句柄。
3.2.2 MYSQL_RES查询结果集
MYSQL_RES *res = nullptr;
MYSQL_RES是数据库的查询结果集类,用于存放调用查询函数之后的结果集。
3.2.3 MYSQL_ROW获取单行内容
MYSQL_ROW row;
实际来说,MYSQL_ROW不是一个类,它本质上是一个指向字符串数组的指针,也就是一个二级指针char**,不过为了方便起见,我就把MYSQL_ROW也放在“类介绍”的范畴之下了。
这个东西的作用是从MYSQL_RES结果集中获得某一行的数据。
3.3 重要接口函数介绍
3.3.1 连接数据库
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, ///< 数据库句柄const char *host, ///< 主机名const char *user, ///< 用户名const char *passwd,///< 密码const char *db, ///< 数据库名unsigned int port, ///< 端口号(MySQL为3306)const char *unix_socket,///< unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制unsigned long clientflag ///< clientflag–Mysql运行为ODBC数据库的标记,一般取0);
连接 失败返回0。
3.3.2 查询
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
这里的查询实际上是广义上的查询操作,名义上是query,实际上可以执行增删改查所有的操作,取决于传入的sql语句的内容。
如:sql = “insert into user_info values(‘user4’, ‘888888’)”;代表的就是执行插入数据的操作。
执行成功返回0。
3.3.3 获取查询结果集
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
获取的方式有两种。
第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;
第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回。
故经常我们使用mysql_store_result。
3.3.4 读取结果集数据
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
其中参数为MYSQL_RES类型的结果集。
4. 结果演示
参考链接
参考链接1
参考链接2
MySQL错误码
C++中使用MySQL数据库相关推荐
- echarts导入mysql数据库_Echarts最新:Django中从mysql数据库中获取数据传到echarts方式_爱安网 LoveAn.com...
关于"Echarts"的最新内容 聚合阅读 这篇文章主要介绍了基于vue+echarts 数据可视化大屏展示的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...
- linux mysql cpu 高,Linux系统中关于Mysql数据库导致CPU很高的问题解决
Linux系统中关于Mysql数据库导致CPU很高的问题解决 发布时间:2007-11-19 00:01:12来源:红联作者:spworks 服务器环境 Liunx AS4 + PHP5 + Mysq ...
- Linux中的MySql数据库远程连接
Linux中的MySql数据库远程连接 rpm–qa |grep mysql安装了以下的包: mysql-libs-5.1.71-1.el6.x86_64 mysql-connector-java-5 ...
- python echarts mysql python_Django中从mysql数据库中获取数据传到echarts方式
尝试了几种方法,感觉过于复杂,于是自己写了一个方法. (1)首先在要绘图的页面传入从数据库中提取的参数,这一步通过views可以实现: (2)然后是页面加载完成时执行的函数ready,调用方法f; ( ...
- 在Asp.net core 项目中操作Mysql数据库
工程环境 : win10+asp.net core 2.1 + vs2017 步骤: 1 在vs中新建asp.net core 项目 2 在Nuget中为项目添加第三方包microsoft.visu ...
- docker容器mysql头文件_在Docker容器中使用MySQL数据库
开发过程中经常需要安装.调试mysql数据库,还需要在各种操作系上安装包依赖,实在是繁琐,因此就研究了一下如何在docker上运行一个mysql镜像,省却了我安装.找依赖的问题. 注:本文所有内容均在 ...
- mysql一张表1亿天数据_1亿条数据在PHP中实现Mysql数据库分表100张
转: 1亿条数据在PHP中实现Mysql数据库分表100张 http://php-z.com/thread-2115-1-1.html (出处: PHP-Z) 当数据量猛增的时候,大家都会选择库表散列 ...
- django使用mysql原始语句,Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...
- 技巧实例:如何在.NET中访问MySQL数据库
引言:如果你不是只在大集团公司工作过的话,你一定会有机会接触到MySQL,虽然它并不支持事务处理,存储过程,但是它提供的功能一定能满足你的大部分需求,另外,简洁的MySQL也有一些它独到的优势,在有些 ...
- python django mysql结果获取_Django中从mysql数据库中获取数据传到echarts方式
尝试了几种方法,感觉过于复杂,于是自己写了一个方法. (1)首先在要绘图的页面传入从数据库中提取的参数,这一步通过views可以实现: (2)然后是页面加载完成时执行的函数ready,调用方法f; ( ...
最新文章
- LoRDEC: a tool for correcting errors in long sequencing reads 纠正长序列读取错误的工具
- Linux Shell常用技巧(十二) Shell编程
- 将源码包打包成RPM包
- SQL工具-技术支持工具
- 谈谈晋升-互联网民工篇
- java中拷贝文件的代码_拷贝文件夹中的所有文件到另外一个文件夹
- 数据库(4)——候选码和主键
- 95-250-040-源码-barrier机制-简介
- Brute Force(暴力算法)
- 点击复制按钮进行复制文本
- 分享一款实用的太阳能充电电路(室内光照可用)
- 实现圣杯布局的三种方式
- 前端html与css学习笔记总结篇(超详细)
- 硬科技驱动西咸新区发展新引擎
- Android反编译工具合集
- JAVA实现FTP文件传输
- Google Code Search
- wow盗号木马事件前后
- 鹏业安装算量软件2021渠道大会暨授牌仪式成功举办
- 马尔科夫链蒙特卡洛方法
热门文章
- 关于clearInterval的误区
- uni-app 可以做微信公众号吗_2020年公众号还值得做吗?(目标劝退1万人) 为大家提供些思路!新增对微信圈子、视频号、付费文章的简析!...
- android历史记录去重,【图片】*知识帖*求精!!安卓从1.0到如今4.2所有版本集合!!【刷机精灵吧】_百度贴吧...
- 英伟达、AMD 高端芯片断供,国产芯片如何迅速崛起
- HTML5系列代码:为文字设置描边效果文字发光
- 台式机xp系统无线网卡插上没反应
- Android Dpi dip px 以及DisplayMetrics中density densityDpi的关系
- uvm misc note
- Linux关机和重启的命令
- [电脑问题]旧电脑CPU风扇不转,黑屏无法开机的解决思路以及电脑清理总结