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

相关推荐
马克Markorg3 小时前
常见的向量数据库和具有向量数据库能力的数据库
数据库
半桔4 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
HABuo4 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
我在人间贩卖青春5 小时前
C++之多重继承
c++·多重继承
m0_736919105 小时前
C++代码风格检查工具
开发语言·c++·算法
Coder_Boy_5 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy6 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
2301_763472467 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
阿猿收手吧!7 小时前
【C++】std::promise原理与实战解析
c++
数据知道7 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql