C++查询mysql数据
文章目录
文章目录
1.前言
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代码,用法如下:
const char* sql = "...(sql代码)";if (mysql_query(conn, sql) != 0) { std::cerr << "出错: " << mysql_error(conn) << std::endl;mysql_close(conn); return 1;}
我们要查询数据,就需要用到选择数据库的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 |
综上所述,执行查询的代码应如下:
// 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);
然后再获取错误,完整代码:
// 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;}
或者是这样(自动判断列数):
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;}}
完整代码:
// 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)释放资源
// 4. 释放资源 mysql_free_result(result);
3.完整代码
// 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);