MySQL的C語言程式設計(一)

傑克.陳發表於2014-12-09
原文:MySQL的C語言程式設計(一)

初學MySQL,記錄一下MySQL用c語言程式設計時遇到的問題。

這是我的源程式:

 1 int main(void)
 2 {
 3 MYSQL *mysql=NULL;
 4 
 5 
 6 if((mysql=mysql_init(mysql))==NULL)
 7 {
 8 fprintf(stderr,"Cannot initialize MySQL");
 9 return 1;
10 }
11 if(mysql_real_connect(mysql,"localhost","kerry","beck123",NULL,0,NULL,0)==NULL)
12 {
13 fprintf(stderr,"%d:%s 
",mysql_errno(mysql),mysql_error(mysql));
14 return 1;
15 }
16 printf("Succeed!
");
17 return 0;
18 }

 

MySQL的c API有幾個重要的資料型別:

  •  MYSQL

    該結構代表1個資料庫連線的控制程式碼。幾乎所有的MySQL函式均使用它。不應嘗試拷貝MYSQL結構。不保證這類拷貝結果會有用

  • MYSQL_RES

    該結構代表返回行的查詢結果(SELECTSHOWDESCRIBEEXPLAIN)。在本節的剩餘部分,將查詢返回的資訊稱為“結果集”。

  •  MYSQL_ROW

    這是1行資料的“型別安全”表示。它目前是按照計數字節字串的陣列實施的。(如果欄位值可能包含二進位制資料,不能將其當作由Null終結的字串對待,這是因為這類值可能會包含Null位元組)。行是通過呼叫mysql_fetch_row()獲得的。

  •  MYSQL_FIELD

    該結構包含關於欄位的資訊,如欄位名、型別和大小。這裡詳細介紹了其成員。通過重複呼叫mysql_fetch_field(),可為每個欄位獲得MYSQL_FIELD結構。欄位值不是該結構的組成部份,它們包含在MYSQL_ROW結構中。

  •  MYSQL_FIELD_OFFSET

    這是MySQL欄位列表偏移量的“型別安全”表示(由mysql_field_seek()使用)。偏移量是行內的欄位編號,從0開始。

宣告“MYSQL *mysql=NULL;“,必須為該指標賦值為NULL。如果定義為”MYSQL *mysql;”,不為該指標賦值,就會生成野指標,程式執行時會發生“段錯誤 (核心已轉儲)“錯誤。

“野指標”不是NULL指標,是指向“垃圾”記憶體(不可用記憶體)的指標。人們一般不會錯用NULL指標,因為用if語句很容易判斷。但是“野指標”是很危險的,if無法判斷一個指標是正常指標還是“野指標”。有個良好的程式設計習慣是避免“野指標”的唯一方法。

 

呼叫mysql_init()函式,該函式會分配或初始化與mysql_real_connect()相適應的MYSQL物件。如果mysqlNULL指標,該函式將分配、初始化、並返回新物件。否則,將初始化物件,並返回物件的地址。如果mysql_init()分配了新的物件,當呼叫mysql_close()來關閉連線時。將釋放該物件。

 


相關文章