C++查询mysql数据

文章目录

文章目录

1.前言

[2. 代码](#2. 代码)

(1)执行查询SQL

(2)获取结果集

(3)遍历结果集(获取字段数、行数)

(4)释放资源

3.完整代码


1.前言

我们成功连接数据库mysql后,可以对mysql进行亿些操作,比如查询,插入,删除......

今天就来讲讲查询。

本文默认你已成功连接mysql,关于不知道如何连接mysql的自己看我之前的博文

C++连接MySQL完整教程https://blog.csdn.net/bilin_jam/article/details/149665533


2. 代码

(1)执行查询SQL

首先我们要先了解一个函数:mysql_query(),虽然query的意思是查询,但它不只只可以进行查询数据,它可以执行任何sql代码,用法如下:

cpp 复制代码
const char* sql = "...(sql代码)";
    if (mysql_query(conn, sql) != 0) { 
        std::cerr << "出错: " << mysql_error(conn) << std::endl;
        mysql_close(conn); 
        return 1;
    }

我们要查询数据,就需要用到选择数据库的sql代码:

sql 复制代码
SELECT id,name,gender,level,createTime FROM bilin_user

此处id,name,gender,level,createTime 是我的数据库的列的名称。bilin_user 是我数据库表格的名称。我的数据库大致如下:

id name gender level createTime
1 *** 200 2024-10-05 16:19:11
2 *** 100 2024-10-05 17:32:10
3 *** 41 2025-07-24 18:43:10
[bilin_user]

综上所述,执行查询的代码应如下:

cpp 复制代码
// 1. 执行查询SQL ; 
    const char* sql = "SELECT id,name,gender,level,createTime FROM bilin_user";
    if (mysql_query(conn, sql) != 0) { 
        std::cerr << "查询失败: " << mysql_error(conn) << std::endl;
        mysql_close(conn); 
        return 1;
    } 
(2)获取结果集

首先,我们可以用一段代码来获取:

cpp 复制代码
MYSQL_RES* result = mysql_store_result(conn);

然后再获取错误,完整代码:

cpp 复制代码
// 2. 获取结果集
    MYSQL_RES* result = mysql_store_result(conn); 
    if (result == NULL) { 
        std::cerr << "获取结果集失败: " << mysql_error(conn) << std::endl;
        mysql_close(conn); 
        return 1;
    } 
(3)遍历结果集(获取字段数、行数)

定义字段数:

cpp 复制代码
int num_fields = mysql_num_fields(result);

定义一行数据(数组):

cpp 复制代码
MYSQL_ROW row;

然后挨个输出即可:

cpp 复制代码
while ((row = mysql_fetch_row(result)) != NULL) { 
        std::cout << row[0] << std::endl;
        std::cout << row[1] << std::endl;
        std::cout << row[2] << std::endl;
        std::cout << row[3] << std::endl;
        std::cout << row[4] << std::endl;
    } 

或者是这样(自动判断列数):

cpp 复制代码
int num_row = mysql_field_count(conn);
            while ((row = mysql_fetch_row(result)) != NULL) { 
                    int num = 0;
                    for ( num = 0; num <= num_row; num++)
                    {
                        std::cout << row[num] << std::endl;
                    }
            } 

完整代码:

cpp 复制代码
// 3. 遍历结果集(获取字段数、行数)
    int num_fields = mysql_num_fields(result); // 字段数
    MYSQL_ROW row; // 一行数据(数组)
    while ((row = mysql_fetch_row(result)) != NULL) { 
        std::cout << row[0] << std::endl;
        std::cout << row[1] << std::endl;
        std::cout << row[2] << std::endl;
        std::cout << row[3] << std::endl;
        std::cout << row[4] << std::endl;
    } 
(4)释放资源
cpp 复制代码
// 4. 释放资源 
    mysql_free_result(result);

3.完整代码

cpp 复制代码
// 1. 执行查询SQL ; 
    const char* sql = "SELECT id,name,gender,level,createTime FROM bilin_user";
    if (mysql_query(conn, sql) != 0) { 
        std::cerr << "查询失败: " << mysql_error(conn) << std::endl;
        mysql_close(conn); 
        return 1;
    } 
    
    // 2. 获取结果集
    MYSQL_RES* result = mysql_store_result(conn); 
    if (result == NULL) { 
        std::cerr << "获取结果集失败: " << mysql_error(conn) << std::endl;
        mysql_close(conn); 
        return 1;
    } 
    
    // 3. 遍历结果集(获取字段数、行数)
    int num_fields = mysql_num_fields(result); // 字段数
    MYSQL_ROW row; // 一行数据(数组)
    while ((row = mysql_fetch_row(result)) != NULL) { 
        std::cout << row[0] << std::endl;
        std::cout << row[1] << std::endl;
        std::cout << row[2] << std::endl;
        std::cout << row[3] << std::endl;
        std::cout << row[4] << std::endl;
    } 
    
    // 4. 释放资源 
    mysql_free_result(result);

相关推荐
山峰哥6 分钟前
SQL调优核心战法——索引失效场景与Explain深度解析
大数据·汇编·数据库·sql·编辑器·深度优先
GottdesKrieges8 分钟前
OMS迁移平台问题排查思路
数据库
源力祁老师12 分钟前
Odoo 客户端注册表
数据库
星轨初途14 分钟前
郑州轻工业大学2025天梯赛解题
c++·经验分享·笔记·算法·链表·剪枝
学Linux的语莫14 分钟前
Milvus向量数据库的操作(基于Langchain)
数据库·langchain·milvus
怪我冷i15 分钟前
dbeaver下载数据库驱动加速
数据库·postgresql·ai编程·ai写作
星辰_mya28 分钟前
redis集群
数据库·redis·缓存
编程小Y1 小时前
MySQL原理
数据库·mysql
点云SLAM1 小时前
C++ 引用折叠(Reference Collapsing)和示例讲解说明
数据结构·c++·标准算法·完美转发·代码性能优化·c++ 引用折叠·typedef / using
chenyuhao20241 小时前
Linux网络编程:HTTP协议
linux·服务器·网络·c++·后端·http·https