C++ Mysql基本操作

连接Mysql

MYSQL *mysql_init(MYSQL *mysql)

如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。

MYSQL *mysql_real_connect(MYSQL *mysql, \const char *host, const char *user, \const char *passwd, const char *db, \unsigned int port, const char *unix_socket, \unsigned long client_flag)

第一个参数应是已有Mysql结构的地址。调用mysql_real_connect()之前,必须调用mysql_init(MYSQL *)来初始化MYSQL结构.

SQL查询

int mysql_query(MYSQL *mysql, const char *query)
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)

执行由“query”指向的SQL查询,它应是字符串长度字节“long”。正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含由分号隔开的多条语句。
mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之(二进制数据可能包含字符‘\0’,mysql_query()会将该字符解释为查询字符串结束)。此外,mysql_real_query()比mysql_query()快,这是因为它不会在查询字符串上调用strlen()。

结果处理

1.对于Mysql语句的返回的结果集,需要用一个容器去装载,因此首先就需要存储结果的数据结构MYSQL_RES,该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE, EXPLAIN)。
2.有了存储结果的数据结构,因此可以通过调用结果的返回函数,使其能够将结果存储在MYSQL_RES的类型的结果集中,该函数为:

 MYSQL_RES *mysql_store_result(MYSQL *mysql)

对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result() 。

3.根据结果集判断当前的行数,其函数为:

my_ulonglong mysql_num_rows(MYSQL_RES *result) //返回结果集中的行数。
my_ulonglong mysql_affected_rows(MYSQL *mysql) //返回上次UPDATE更改的行数,上次DELETE删除的行数,或上次INSERT语句插入的行数。

4.根据结果集判断字段数(列数),想象一下列数属于MYSQL_RES结果集里面的一部分,因此需要重新建立一个数据结构用于存储字段定义,MYSQL_FIELD正是用于此。调用mysql_fetch_fields函数可以将结果集转化为字段域。

unsigned int mysql_num_fields(MYSQL_RES *result) //指函数返回结果集中字段的数。
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)//对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。

5.mysql_fetch_fields()和mysql_fetch_field的区别

MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result) //返回采用MYSQL_FIELD结构的结果集的列。重复调用该函数,以检索关于结果集中所有列的信息。未剩余字段时,mysql_fetch_field()返回NULL。

可以看作mysql_fetch_fields返回的是一个二维结构,而mysql_fetch_field返回的是单列,需要重复调用,才能打印所有列。

测试程序

mysql的结构

#include <iostream>
#include <string>
#include <mysql/mysql.h>
using namespace std;const char* IP = "127.0.0.1";
const char* USER = "root";
const char* PASSWORD = "";
const char* DB = "example";
const int PORT = 3306;int main(int argc, char *argv[])
{MYSQL conn;mysql_init(&conn);if (!mysql_real_connect(&conn, IP, USER, PASSWORD, DB, PORT, NULL, 0)){printf("mysql connect failed: %s error\n", mysql_error(&conn));mysql_close(&conn);return -1;}printf("mysql connect success\n");MYSQL_RES *res;mysql_query(&conn, "SELECT * FROM stu_inf");res = mysql_store_result(&conn);printf("number of dataline: %d\n", (int)mysql_num_rows(res));#if 0 //get fieldsint col;printf("number of field: %d\n", col = mysql_num_fields(res));MYSQL_FIELD *field;field = mysql_fetch_fields(res);for (int i = 0; i < col; i++){//string _name = mysql_fetch_fields(res)->name;cout << "field name " << i  << ": " << field[i].name << endl;}#elif 0int col;col = mysql_num_fields(res);char *str_field[32];  //定义一个字符串数组存储字段信息for (int i = 0; i < col; i++)   //在已知字段数量的情况下获取字段名{str_field[i] = mysql_fetch_field(res)->name;printf("field %d: %s\n", i, str_field[i]);}#elseint col;col = mysql_num_fields(res);for (int i = 0; i < col; i++){string colName = mysql_fetch_field(res)->name;//这里改为fields只能打印idcout << "field " << i << ": " << colName << endl;}
#endifMYSQL_ROW row;while (row = mysql_fetch_row(res)){
#if 1for (int i = 0; i < col; i++){cout << (row[i] ? row[i] : "NULL") << " ";}cout << endl;
#endif}mysql_free_result(res);mysql_close(&conn);return 0;
}

测试结果:
mysql connect success
number of dataline: 2
field 0: id
field 1: name
field 2: phone
1 xq NULL
1 zl NULL

C++ Mysql基本操作相关推荐

  1. MySQL中定义fk语句_MySQL基础篇/第3篇:MySQL基本操作语句.md · qwqoo/MySQL-Review - Gitee.com...

    ### 第3篇:MySQL基本操作语句 - MySQL基础操作 #### 排序检索数据 - 之前的数据没有进行排序,其是按照默认在数据表中的数据返回的 - SELECT语句的ORDER BY 子句进行 ...

  2. 20分钟学会mysql_5分钟学会mysql基本操作

    mysql视频教程栏目介绍如何快速学会mysql基本操作 相关免费学习推荐:mysql视频教程 文章目录一.SQL是什么? 分类: 二.关于数据库CRUD操作 1.操作表list: 2.对表内数据进行 ...

  3. mysql键1键2_详解mysql基本操作详细(二)

    前言 本文类容 1.数据库的几大约束 2.表与表之间的关系 约束: 主键约束: 作用:为了保证数据的有效性和完整性 mysql中常用的约束:主键约束(primary key) 唯一约束(unique) ...

  4. linux mysql etc inid_Linux下mysql基本操作

    Linux下mysql基本操作 作者:浩浩哥来了 对mysql进行初始密码的添加 方法(一) mysqladmin -uroot password 123 方法(二) 如果在添加初始密码是报错了可以进 ...

  5. ci mysql操作_MySQL基础篇/第3篇:MySQL基本操作语句.md · icanci/MySQL-Review - Gitee.com...

    ### 第3篇:MySQL基本操作语句 - MySQL基础操作 #### 排序检索数据 - 之前的数据没有进行排序,其是按照默认在数据表中的数据返回的 - SELECT语句的ORDER BY 子句进行 ...

  6. MySQL基本操作,个人总结。(WampServer小补充)

    原文链接    https://blog.csdn.net/Edogawa_Konan/article/details/80259838 WampServer就是Windows Apache Mysq ...

  7. 【MySQL基础】MySQL基本操作详解

    系列文章目录 第1篇:[MySQL基础]MySQL介绍及安装 第2篇:[MySQL基础]MySQL基本操作详解 文章目录 ✍1,数据库操作     

  8. 史上最全MySQL基本操作(这一篇就够用了!!!)

    基础知识请移步:数据库.MySQL基本知识 欢迎学习交流!!! 持续更新中- 文章目录 MySQL基本操作 一.SQL语法规则 二.SQL库操作 1.创建数据库 2.显示数据库 3.使用数据库 4.修 ...

  9. MySQL基本操作(命令行方式)

    MySQL基本操作(命令行方式) 1.登录MySQL 2.MySQL 创建数据库 3.MySQL 删除数据库 4.MySQL选择数据库 5.MySQL 创建数据表 6. MySQL 删除数据表 7.M ...

最新文章

  1. Spring 实践 -IoC
  2. php关机启动不了,win10关机关不掉怎么办
  3. boost::describe模块宏BOOST_DESCRIBE_PP_IS_PAREN的测试程序
  4. Java:ChronicleMap第1部分,精简版
  5. 史上最全最白话RNN原理
  6. Atitit机器学习原理与概论book attilax总结
  7. 开启智慧新生活 新余市智慧城市建设全省率先
  8. ffmpeg x264编码参数
  9. IT业台风警报(一)——望天
  10. error “download token not specified“
  11. win10亮度怎么调_笔记本屏幕亮度怎么调
  12. Android 面试之20个常见 APP 架构常见面试题~
  13. 通过文献计量学助您发表高影响因子论文—基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法
  14. 应用程序中的服务器错误 怎么解决办法,iwms出现“/”应用程序中的服务器错误。解决办法...
  15. 汉语言文学专业c学校,自考汉语言文学专业哪个学校好?
  16. 汇编语言——王爽版 总结
  17. 上海java程序员招聘流程分析
  18. 前景提取 matlab,基于MATLAB的动态前景目标特征提取与运动跟踪
  19. 身为实验室管理者的你,需要知道的实验室物联网!
  20. ce3 全局光照(lpv:Light_Propagation_Volumes)

热门文章

  1. 机械臂控制C语言程序,51单片机的6自由度机械臂 16路舵机控制 源码
  2. 对计算机英语课的作文,有趣的电脑课作文5篇
  3. oracle中删除yuj_oracle数据库的删除
  4. 共享服务器网络优化,Samba共享服务器的搭建优化
  5. 【汇智学堂】-python小游戏(弹球游戏之六-类的使用中体会坐标位置)
  6. Android的CalendarView控件使用及日期进行农历转换
  7. 程序员为维持游戏开发被迫炒股,没想到一年内反赚1600万
  8. 钉钉内部应用开发-创建应用
  9. 客户视频|申银万国期货金老师:选择ZStack,省钱省力又安心
  10. Vue2学习笔记(尚硅谷张天禹老师)day-01