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

相关推荐
全栈老石1 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_20 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
肆忆_1 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星1 天前
虚函数表:C++ 多态背后的那个男人
c++
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
端平入洛3 天前
delete又未完全delete
c++
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
端平入洛4 天前
auto有时不auto
c++
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql