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

相关推荐
破刺不会编程7 分钟前
linux线程概念和控制
linux·运维·服务器·开发语言·c++
Albert Tan16 分钟前
ORACLE DATABASE 23AI+Apex+ORDS -纯享版
数据库·oracle
程序员编程指南23 分钟前
Qt OpenGL 集成:开发 3D 图形应用
c语言·数据库·c++·qt·3d
小徐不徐说1 小时前
动态规划:从入门到精通
数据结构·c++·算法·leetcode·动态规划·代理模式
婪苏(Python学习ing)1 小时前
MySQL 与 Redis 基础入门:从安装到核心操作
数据库
程序员编程指南2 小时前
Qt 网络编程进阶:RESTful API 调用
c语言·网络·c++·qt·restful
幻灭行度2 小时前
通过redis_exporter监控redis cluster
数据库·redis·缓存
Wang's Blog2 小时前
Nestjs框架: 基于Mongodb的多租户功能集成和优化
数据库·mongodb·多租户
程序员编程指南3 小时前
Qt XML 与 JSON 数据处理方法
xml·c语言·c++·qt·json
Edingbrugh.南空3 小时前
Aerospike架构深度解析:打造web级分布式应用的理想数据库
数据库·架构