• C++ 连接MySQL数据库并读取数据


    一、添加库和头文件,由于各个IDE或编译器添加的方式都不同,在这里不做介绍

    二、利用C++在MySQL中存取数据的基本思路:

    以读取数据为例:

    1)第一步,要将你的C++程序与Mysql连接起来,这里要用到函数mysql_real_connect()

    2)第二步,执行查询语句,这里要用到函数mysql_query()

    3)查询语句查询到的结果,称为结果集,第三步就是要将结果集中的所有数据,存放在一个变量A中,类型为MYSQL_RES

    注意:这个变量中存放的数据,是以“行”和“列”为结构的,也就是一整个表。

    例如:

    身份证号

    姓名

    性别

    余额

    1111

    Mike

    50

    2222

    John

    30

    4)虽然所有数据都存放进了上一步的变量A中,但你还不能把A作为一个整体输出到屏幕上,而需要另一个变量B,类型为MYSQL_ROW,变量B类似一个一维数组,一次只能储存一行变量A中的数据,而下标[ ]表示列,假设变量B当前储存了变量A中的第一行,则B[2]就是指这一行的第二列,也就是Mike,将变量A中的一行赋给变量B的函数叫做mysql_fetch_row(),而为了将变量B中储存的数据全部输出到屏幕,则需要用到循环

    5)最后用完了,要释放内存,并关闭和数据库的连接。

    实际上,还有一个最重要的变量,类型为MYSQL(从类型的名字就可以看出来很重要),是必须在第一步之前就声明的,试想,C++程序与Mysql这两个本来毫无关联的东西,是怎么联系起来的呢?如果C++程序在mysql内部,有一个“通信兵”,这个“通信兵”在C++连接mysql时承担重要的作用。而变量A又是怎么储存查询得到的结果集的呢,这也需要这个“通信兵”先在mysql内找到这个结果集的地址,再通过一个函数,mysql_store_result(),把结果集的地址告诉这个函数,让这个函数把这个地址储存的值(也就是结果集),赋给变量A。

    三、类型和api介绍

    类型:

    MYSQL:该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。

    MYSQL_RES:该结构代表返回行的查询结果(例如SELECT查询语句)。在本节的剩余部分,将查询返回的信息称为“结果集”。(也就是前面提到的变量A)

    MYSQL_ROW:这是1行数据的“类型安全”表示,行是通过调用mysql_fetch_row()从MYSQL_RES型变量中获得的。(也就是前面提到的变量B)

    例如定义一个MYSQL_RES和一个MYSQL_ROW变量,并将MYSQL_RES中的一行赋给MYSQL_ROW变量

    MYSQL_RES *result;
    MYSQL ROW row;
    
    //.....为result赋值部分省略
    
    row = mysql_fetch_row(result);
    //每成功调用一次mysql_fetch_row(),就滑向下一行,若到达最后一行,则返回NULL
    //所以下次调用mysql_fetch_row(result)时,就是将下一行赋给一个MYSQL_ROW变量
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    api:

    mysql_init():用于初始化MYSQL变量

    MYSQL ceshi;
    mysql_init(&ceshi);
    
    • 1
    • 2

    mysql_real_connect():连接MYSQL,有8个参数,

    第一个参数是MYSQL变量的地址,

    第二个参数是主机名或IP地址,如果“host”是NULL或字符串"localhost"或“127.0.0.1”,连接将被视为与本地主机的连接,

    第三个参数是MySQL登录ID

    第四个参数是用户的密码

    第五个参数是数据库名称

    第六个参数是TCP/IP连接的端口号

    第七个参数一般为NULL,不需要了解

    第八个参数一般为0,不需要了解

    例如:

    mysql_real_connect(&ceshi, "127.0.0.1", "root", "123", "db", 3306, NULL, 0)
    
    • 1

    mysql_query():向数据库发送查询语句

    第一个参数为MYSQL变量的地址,第二个参数为"查询语句"

    例如:

    mysql_query(&ceshi, "SELECT * FROM movie");
    
    • 1

    mysql_store_result():将mysql_query()查询到的结果集,赋给MYSQL_RES变量

    只有一个参数,为MYSQL变量的地址

    例如:

    result = mysql_store_result(&ceshi);
    
    • 1

    mysql_fetch_row():将MYSQL_RES变量中的一行赋给MYSQL_ROW变量,当重复调用mysql_fetch_row()时,将逐个获取结果集的行,到最后一行后返回NULL

    mysql_num_fields():获取结果集中的列数,返回值为整型

    下面是实践:

    #include 
    #include 
    using namespace std;
    
    int main()
    {
    	MYSQL ceshi; 
    
    	mysql_init(&ceshi);   //初始化MYSQL变量
    
    	MYSQL_RES *result; 
    
    	MYSQL_ROW row;
    
    	int num;        //用来存放结果集列数
    
    	int i;          
    
    
    
    	if (mysql_real_connect(&ceshi, "127.0.0.1", "root", "123", "cardinfo", 3306, NULL, 0))  //连接到mysql
    	{
    		cout << "
    	-----MySQL已连接----" << endl;
    	}
    	
    	if (!mysql_query(&ceshi, "SELECT * FROM vips"))   //若查询成功返回0,失败返回随机数
    	{
    		cout << "
    	  ----查询成功----" << endl;
    	}
    
    	result = mysql_store_result(&ceshi);    //将查询到的结果集储存到result中
    
    	num = mysql_num_fields(result);        //将结果集列数存放到num中
    
    	while ((row = mysql_fetch_row(result)))  //遇到最后一行,则中止循环
    	{
    		for (i = 0; i < num; i++)         //利用for循环,输出该行的每一列
    		{
    			cout << row[i]<< "	";    //row是MYSQL_ROW变量,可以当做数组使用,i为列数
    		}
    		cout << endl;
    	}
    	mysql_free_result(result);     //释放结果集所占用的内存
    	mysql_close(&ceshi);          //关闭与mysql的连接
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
  • 相关阅读:
    《Go Web 编程》之第9章 发挥Go的并发优势
    用python实现mac地址加一
    1.贪心理论与常见的证明方法
    Halcon转OpenCV实例--保险丝颜色识别(附源码)
    c++学习【23】matlab实现FOC算法
    外包干了一个月,技术明显进步。。。。。
    DS18B20U概述,VSC7429_VSC8572以太网(PHY)
    【使用vscode在线web搭建开发环境--code-server搭建】
    【LeetCode】恢复二叉搜索树 [M](Morris遍历)
    Elasticsearch Head的使用
  • 原文地址:https://blog.csdn.net/m0_52789121/article/details/126654516