MySQL 教材:C API 開啟資料庫

讓我們示範一個與 MySQL 連線,並且開啟一個資料庫的 C 原始碼。 稱此函式為 opendb.c,假設我們的連線資料如下:

以下就是原始碼:
#include <stdio.h>
#include <mysql.h>

#define MyHOST "host.domain.name"
#define MyNAME "user"
#define MyDB   "testdb"

extern MYSQL *dp;

int opendb(void) {
    char pass[9];
    pass[0] = 'a';
    pass[1] = 'b';
    pass[2] = 'c';
    pass[3] = 'd';
    pass[4] = '1';
    pass[5] = '2';
    pass[6] = '3';
    pass[7] = '4';
    pass[8] = '\0';

    dp = mysql_init(NULL);
    if (dp == NULL) {
        fprintf(stderr, "mysql_init() failed\n");
        return 2;
    }
    mysql_real_connect(dp, MyHOST, MyNAME, pass, MyDB, 0, NULL, 0);
    if (dp == NULL) {
        fprintf(stderr, "mysql_real_connect() failed\n");
        return 3;
    }
    if (mysql_select_db(dp, MyDB) != 0) {
        fprintf(stderr, "mysql_select_db() failed\n");
        mysql_close(dp);
        return 4;
    }
    return 0;
}

這個程式可以如此編譯:
gcc -c -I/usr/include/mysql opendb.c
只要修改 MyHOST, MyNAME, MyDB 和 pass 的值,重新編譯, 這個函式就可以幫您與 MySQL 連線,開啟所要求的資料庫,或者輸出簡單的錯誤訊息、 返回錯誤編號:
  1. 若與 MySQL 伺服機連線失敗,返回 2
  2. 若連線成功但是登入失敗,返回 3
  3. 若登入成功但開啟資料庫失敗,返回 4
  4. 若一切正常,返回 0

以下,我們簡單說明上面那個程式的設計。

最後要提醒您,因為連線 MySQL 的通行碼寫在這個 C 原始碼裡面, 所以這個檔案當然要小心保管。 即使在編譯之後,把這個檔案內的 pass 定義部份擦掉也可以。 一般來說,這個檔案不會經常需要修改。 當然,您也可以改寫這個程式,利用 argv[] 使得 C 從指令參數取得連線資料, 這我就不多說了。

習題

  1. 將這一節中的程式改寫成您自己可以用的版本。試試看能不能編譯成功。 若成功,應該會出現 opendb.o 檔案。
[BCC16-A]
單維彰 (02/06/02) ---
[Prev] [Next] [Up]