首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

C/C++ 呼叫 MySQL C API 完整範例:連線、查詢、多語句、結果集處理與資源釋放

     編輯:MySQL 綜合教學

基於 VS2008 驗證的 MySQL C API 完整範例,涵蓋初始化、連線、字符集設定、單/多語句執行、結果集逐行讀取、錯誤處理與資源釋放,可直接作為專案參考基礎。

關鍵步驟速覽

  1. mysql_init() 初始化 MYSQL 結構體。
  2. mysql_real_connect() 建立連線,最後一個參數傳 CLIENT_MULTI_STATEMENTS 啟用多語句。
  3. mysql_query() 執行 SET NAMES gbk 設定字符集。
  4. mysql_store_result() 取得結果集指標。
  5. 迴圈呼叫 mysql_fetch_row() 逐行讀取,mysql_num_fields() 取欄位數。
  6. 多語句需用 do { ... } while (mysql_next_result() == 0) 遍歷所有結果集。
  7. 結束前 mysql_free_result()、mysql_close() 釋放資源。

核心程式碼結構

MYSQL mydata;
mysql_init(&mydata);
mysql_real_connect(&mydata, "127.0.0.1", "root", "root", "im", 3306, NULL, CLIENT_MULTI_STATEMENTS);
mysql_query(&mydata, "SET NAMES gbk");

// 單一查詢
mysql_query(&mydata, "SHOW DATABASES");
MYSQL_RES *res = mysql_store_result(&mydata);
process_result_set(mydata, res);
mysql_free_result(res);

// 多語句批次
char *multi = "INSERT ...; INSERT ...; SELECT * FROM fangl.admin";
mysql_query(&mydata, multi);
do {
    res = mysql_store_result(&mydata);
    if (res) {
        process_result_set(mydata, res);
        mysql_free_result(res);
    } else if (mysql_field_count(&mydata) == 0) {
        printf("%lld rows affected\n", mysql_affected_rows(&mydata));
    }
} while (mysql_next_result(&mydata) == 0);

mysql_close(&mydata);

結果集處理函數

void process_result_set(MYSQL mydata, MYSQL_RES *result) {
    MYSQL_FIELD *field;
    // 印欄位名
    while ((field = mysql_fetch_field(result))) printf("%s ", field->name);
    printf("\n");
    // 印資料行
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(result))) {
        for (int i = 0; i < mysql_num_fields(result); ++i)
            printf("%s ", row[i] ? row[i] : "NULL");
        printf("\n");
    }
}

常見坑點提醒

  • 字符集不一致:必須在連線後立即 SET NAMES,否則中文亂碼。
  • 多語句未啟用 CLIENT_MULTI_STATEMENTS:僅第一條生效,其餘靜默失敗。
  • 結果集未釋放:長連線下會洩漏記憶體,務必配對 mysql_free_result()。
  • 錯誤處理:所有 API 回傳值必須檢查,失敗時呼叫 mysql_error(&mydata) 取得詳細訊息。

此範例在 Windows/VS2008 編譯通過,Linux 下僅需調整標頭檔路徑與連結庫即可移植。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved