文章目錄
文章目錄
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);