文章目录
[2. 代码](#2. 代码)
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);