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

C++ 使用 MySQL C API 連線資料庫(VS2013 + MySQL 5.6 64位)完整配置指南

     編輯:MySQL 綜合教學

C++ 使用 MySQL C API 連線資料庫(VS2013 + MySQL 5.6 64位)完整配置指南

在 Visual Studio 2013 中使用 MySQL 官方 C API(libmysql.lib)連線 MySQL 5.6 64位,記錄專案配置、平台設定、程式碼範例與常見坑點。

開發環境

  • OS:Windows 7 64位
  • IDE:Visual Studio 2013
  • MySQL:5.6.23 64位安裝版(含 include、lib 目錄)

1. 專案平台設定為 x64(關鍵)

  1. 方案總管右鍵專案 → 屬性 → 配置管理員
  2. 作用中解決方案平台 → 新增 → 輸入 x64、複製自 Win32
  3. 確認專案平台顯示 x64

原因:MySQL 64位庫僅能被 64位程式載入,預設 Win32 會導致「無法解析的外部符號」連結錯誤。

2. 包含目錄與庫目錄配置

專案屬性 → VC++ 目錄(或 C/C++ → 一般 / 連結器 → 一般):

  • 包含目錄 新增:C:\Program Files\MySQL\MySQL Server 5.6\include
  • 庫目錄 新增:C:\Program Files\MySQL\MySQL Server 5.6\lib

3. 複製動態庫

將 libmysql.dll 從 MySQL lib 目錄複製至專案輸出目錄(與 .exe 同層)或系統 PATH 目錄,否則執行時提示「找不到 libmysql.dll」。

4. 程式碼範例

#include   // 必須在 mysql.h 之前
#include 
#include 

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")

int main() {
    MYSQL mysql;
    MYSQL_RES *result = nullptr;
    MYSQL_ROW row;

    // 初始化
    mysql_init(&mysql);

    // 連線
    if (!mysql_real_connect(&mysql, "localhost", "root", "root", "dnd", 3306, NULL, 0)) {
        std::cerr << "連線失敗: " << mysql_error(&mysql) << std::endl;
        return 1;
    }
    std::cout << "連線成功!" << std::endl;

    // 設定字符集(避免中文亂碼)
    mysql_set_character_set(&mysql, "utf8");

    // 執行查詢
    const char *sql = "SELECT * FROM user";
    if (mysql_query(&mysql, sql)) {
        std::cerr << "查詢失敗: " << mysql_error(&mysql) << std::endl;
        mysql_close(&mysql);
        return 1;
    }

    // 取得結果集
    result = mysql_store_result(&mysql);
    if (!result) {
        std::cerr << "結果集獲取失敗: " << mysql_error(&mysql) << std::endl;
        mysql_close(&mysql);
        return 1;
    }

    // 遍歷列印
    while ((row = mysql_fetch_row(result))) {
        // row[0], row[1]... 對應 SELECT 選項順序
        std::cout << "ID: " << row[0] << ", Name: " << (row[1] ? row[1] : "NULL") << std::endl;
    }

    // 釋放資源
    mysql_free_result(result);
    mysql_close(&mysql);
    return 0;
}

5. 關鍵細節與避坑

問題解決
編譯錯誤:找不到 mysql.h檢查包含目錄路徑、確認 MySQL 安裝版包含 include 目錄
連結錯誤:LNK2019 未解析符號平台必須設為 x64,庫目錄指向 lib 而非 lib\debug
執行錯誤:libmysql.dll 找不到複製 libmysql.dll 至專案輸出目錄或加入系統 PATH
中文亂碼連線後呼叫 mysql_set_character_set(&mysql, "utf8")
字串字面值編碼原始碼檔案儲存為 UTF-8(含 BOM)或專案字符集設為 65001

6. 記憶體洩漏小測驗

char *sql = "SELECT * FROM user";  // 字串字面值,存儲在唯讀資料段
sql = "I am Zenki Kong";           // 僅改變指標指向,原字面值仍存在,無洩漏
// 若用 malloc/strdup 動態分配,則需 free() 釋放

字串字面值由編譯器管理生命週期,重新賦值指標不會洩漏;動態分配才需手動釋放。

7. 進階:MySQL Connector/C++ 替代方案

官方提供 MySQL Connector/C++,支援 JDBC 風格 API、預處理語句、連線池,物件導向更友善,推薦新專案使用。

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