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);

相关推荐
da-peng-song10 分钟前
ArcGIS Desktop使用入门(三)图层右键工具——定义查询
数据库·arcgis·拆分数据·定义查询
热爱正能量12 分钟前
数据库死锁排查思路
数据库
swordbob23 分钟前
MySQL和Oracle关于读未提交的区别
数据库·mysql·oracle
极客BIM工作室25 分钟前
OCCT gp_Trsf 三维变换类深度剖析:经典设计与底层陷阱
c++
林九生26 分钟前
【实用技巧】MySQL 绿色版一键路径更新脚本详解 —— update_path.bat 深度解析
android·数据库·mysql
野生技术架构师29 分钟前
从 B+ 树到应用层分表:MySQL 海量数据架构解析
数据库·mysql·架构
Amnesia0_031 分钟前
MySQL的事务
数据库·mysql
AC赳赳老秦37 分钟前
OpenClaw + 云数据库运维:自动备份、扩容、迁移 RDS/MySQL 云数据库
运维·开发语言·数据库·人工智能·python·mysql·openclaw
醉城夜风~37 分钟前
类和对象III
开发语言·c++
TDengine (老段)1 小时前
TDengine 物理计划生成 — 算子下沉、Exchange 与 Subplan 切分
大数据·数据库·物联网·时序数据库·tdengine·涛思数据