首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL C API 編程入門:VC++ 連接與數據庫枚舉示例

     編輯:MySQL 資料庫相關知識

核心流程

  1. mysql_init() 初始化連接句柄
  2. mysql_real_connect() 建立真實連接
  3. mysql_list_dbs() / mysql_query() 執行操作
  4. mysql_store_result() 獲取結果集
  5. mysql_fetch_row() 逐行讀取
  6. mysql_free_result() 釋放結果
  7. mysql_close() 關閉連接

完整 VC++ 示例 (MFC ListBox 輸出)

MYSQL *myData = NULL;
MYSQL_RES *myResult = NULL;
MYSQL_ROW row;
unsigned int num_fields, i;
unsigned long *lengths;
CString str;

m_ListBox.ResetContent();
ASSERT(m_ListBox.GetCount() == 0);

// 1. 初始化並連接 (本地 root 無密碼)
if ((myData = mysql_init(NULL)) &&
    mysql_real_connect(myData, NULL, "root", NULL, NULL, MYSQL_PORT, NULL, 0))
{
    m_ListBox.AddString(_T("連接成功"));

    // 2. 枚舉數據庫
    if (myResult = mysql_list_dbs(myData, "%"))
    {
        m_ListBox.AddString(_T("枚舉數據庫成功"));
        num_fields = mysql_num_fields(myResult);

        while ((row = mysql_fetch_row(myResult)))
        {
            lengths = mysql_fetch_lengths(myResult);
            for (i = 0; i < num_fields; i++)
            {
                str.Format(_T("[%.*s]"), lengths[i], row[i] ? row[i] : _T("NULL"));
                m_ListBox.AddString(str);
            }
        }
        str.Format(_T("一共有 %d 個數據庫"), (int)mysql_num_rows(myResult));
        m_ListBox.AddString(str);
        mysql_free_result(myResult);
    }
    else
    {
        m_ListBox.AddString(_T("枚舉數據庫失敗"));
    }
    mysql_close(myData);
}
else
{
    m_ListBox.AddString(_T("連接失敗"));
}

關鍵 API 對照表

函數用途備註
mysql_init()分配/初始化 MYSQL 結構傳 NULL 自動分配
mysql_real_connect()真實建立 TCP 連接host=NULL 走本地 socket/管道
mysql_query()執行 SQL返回 0 成功
mysql_store_result()客戶端緩存完整結果集大結果集慎用,考慮 mysql_use_result()
mysql_fetch_row()取下一行 (字符串數組)NULL 表示無更多行
mysql_fetch_lengths()取當前行各列長度處理二進制/含空字符數據必須用
mysql_free_result()釋放結果集內存必須調用,否則洩漏
mysql_close()關閉連接並釋放句柄連同 mysql_init 分配的內存

常見錯誤與調試

  • mysql_error(myData) 獲取最後錯誤信息
  • mysql_errno(myData) 獲取錯誤碼
  • 編譯鏈接需加 libmysql.lib,運行時需 libmysql.dll 在 PATH 中
  • 字符集設置:mysql_set_character_set(myData, "utf8")

現代化建議

新項目推薦使用 MySQL Connector/C++ (JDBC 風格) 或 ODBC,提供 RAII、預編譯、連接池等高級特性,避免手動資源管理風險。

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