文章目录

  • 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数据库相关推荐

  1. echarts导入mysql数据库_Echarts最新:Django中从mysql数据库中获取数据传到echarts方式_爱安网 LoveAn.com...

    关于"Echarts"的最新内容 聚合阅读 这篇文章主要介绍了基于vue+echarts 数据可视化大屏展示的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...

  2. linux mysql cpu 高,Linux系统中关于Mysql数据库导致CPU很高的问题解决

    Linux系统中关于Mysql数据库导致CPU很高的问题解决 发布时间:2007-11-19 00:01:12来源:红联作者:spworks 服务器环境 Liunx AS4 + PHP5 + Mysq ...

  3. Linux中的MySql数据库远程连接

    Linux中的MySql数据库远程连接 rpm–qa |grep mysql安装了以下的包: mysql-libs-5.1.71-1.el6.x86_64 mysql-connector-java-5 ...

  4. python echarts mysql python_Django中从mysql数据库中获取数据传到echarts方式

    尝试了几种方法,感觉过于复杂,于是自己写了一个方法. (1)首先在要绘图的页面传入从数据库中提取的参数,这一步通过views可以实现: (2)然后是页面加载完成时执行的函数ready,调用方法f; ( ...

  5. 在Asp.net core 项目中操作Mysql数据库

    工程环境 : win10+asp.net core 2.1 + vs2017 步骤: 1 在vs中新建asp.net core  项目 2 在Nuget中为项目添加第三方包microsoft.visu ...

  6. docker容器mysql头文件_在Docker容器中使用MySQL数据库

    开发过程中经常需要安装.调试mysql数据库,还需要在各种操作系上安装包依赖,实在是繁琐,因此就研究了一下如何在docker上运行一个mysql镜像,省却了我安装.找依赖的问题. 注:本文所有内容均在 ...

  7. mysql一张表1亿天数据_1亿条数据在PHP中实现Mysql数据库分表100张

    转: 1亿条数据在PHP中实现Mysql数据库分表100张 http://php-z.com/thread-2115-1-1.html (出处: PHP-Z) 当数据量猛增的时候,大家都会选择库表散列 ...

  8. django使用mysql原始语句,Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...

  9. 技巧实例:如何在.NET中访问MySQL数据库

    引言:如果你不是只在大集团公司工作过的话,你一定会有机会接触到MySQL,虽然它并不支持事务处理,存储过程,但是它提供的功能一定能满足你的大部分需求,另外,简洁的MySQL也有一些它独到的优势,在有些 ...

  10. python django mysql结果获取_Django中从mysql数据库中获取数据传到echarts方式

    尝试了几种方法,感觉过于复杂,于是自己写了一个方法. (1)首先在要绘图的页面传入从数据库中提取的参数,这一步通过views可以实现: (2)然后是页面加载完成时执行的函数ready,调用方法f; ( ...

最新文章

  1. LoRDEC: a tool for correcting errors in long sequencing reads 纠正长序列读取错误的工具
  2. Linux Shell常用技巧(十二) Shell编程
  3. 将源码包打包成RPM包
  4. SQL工具-技术支持工具
  5. 谈谈晋升-互联网民工篇
  6. java中拷贝文件的代码_拷贝文件夹中的所有文件到另外一个文件夹
  7. 数据库(4)——候选码和主键
  8. 95-250-040-源码-barrier机制-简介
  9. Brute Force(暴力算法)
  10. 点击复制按钮进行复制文本
  11. 分享一款实用的太阳能充电电路(室内光照可用)
  12. 实现圣杯布局的三种方式
  13. 前端html与css学习笔记总结篇(超详细)
  14. 硬科技驱动西咸新区发展新引擎
  15. Android反编译工具合集
  16. JAVA实现FTP文件传输
  17. Google Code Search
  18. wow盗号木马事件前后
  19. 鹏业安装算量软件2021渠道大会暨授牌仪式成功举办
  20. 马尔科夫链蒙特卡洛方法

热门文章

  1. 关于clearInterval的误区
  2. uni-app 可以做微信公众号吗_2020年公众号还值得做吗?(目标劝退1万人) 为大家提供些思路!新增对微信圈子、视频号、付费文章的简析!...
  3. android历史记录去重,【图片】*知识帖*求精!!安卓从1.0到如今4.2所有版本集合!!【刷机精灵吧】_百度贴吧...
  4. 英伟达、AMD 高端芯片断供,国产芯片如何迅速崛起
  5. HTML5系列代码:为文字设置描边效果文字发光
  6. 台式机xp系统无线网卡插上没反应
  7. Android Dpi dip px 以及DisplayMetrics中density densityDpi的关系
  8. uvm misc note
  9. Linux关机和重启的命令
  10. [电脑问题]旧电脑CPU风扇不转,黑屏无法开机的解决思路以及电脑清理总结