Linux下C語言連接MySQL

本文出自   http://blog.csdn.net/shuangde800



首先保證安裝:

1:安裝MySQL:sudo apt-get install mysql-server mysql-client
2:安裝MySQL開發包:sudo apt-get install libmysqlclient15-dev
此時需要用到的頭文件會出現在/usr/include/mysql/裏



C語言連接MySQL數據庫

此包含兩個步驟:
1. 使用函數mysql_init初始化一個連接句柄結構.
mysql_init的函數定義如下:
[cpp] view plain copy
  1. MYSQL * mysql_init(MYSQL *);  
通常傳遞NULL給這個例程,他會返回一個指向新分配的連接句柄結構的指針。如果傳遞一個已有的結構,它將會重新初始化。這個例程在出錯時返回NULL.


2. 實際進行連接
目前只是分配和初始化了一個結構,仍然需要使用mysql_real_connect來向一個連接提供參數, 
mysql_real_connect的函數定義:
[cpp] view plain copy
  1. MYSQL* mysql_real_connect(MYSQL* connection,  
  2.         const char *server_host,  
  3.         const char *sql_user_name,  
  4.         const char *sql_password,  
  5.         const char *db_name,  
  6.         unsigned int port_number,  
  7.         const char *unix_socket_name,  
  8.         unsigned int flags);  

指針connection必須指向已經被mysql_init初始化過的結構。

注意server_host既可以是主機名,也可以是IP地址。如果連接本地,可以制定localhost來優化。

sql_user_name和sql_password的含義和它們的字面意思一樣。如果登錄名爲NULL,則假設登錄名爲當前Linux用戶的登錄ID,如果密碼爲NULL,則假設密碼爲空。

port_number和unix_socket_name應該分別爲0和NULL,除非你改變了MySQL安裝的默認設置。他們將默認使用合適的值。

最後,flags參數用來對一些定義的位模式進行OR操作,使得改變使用協議的某些特性。

如果無法連接,則返回NULL。mysql_error函數可以提供有幫助的信息。



3. 使用完連接,通常在程序退出前,要調用函數mysql_close;

mysql_close的函數定義:

[cpp] view plain copy
  1. void mysql_close(MYSQL *connection);  
將關閉連接。


連接MySQL的示例:

[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include "mysql.h"  
  4.   
  5. int main (int argc, char *argv[]) {  
  6.   
  7.     MYSQL *conn;  
  8.   
  9.     // 步驟1: 初始化連接句柄  
  10.     conn = mysql_init(NULL);  
  11.   
  12.     if (conn == NULL) { // 如果返回NULl說明初始化失敗  
  13.         printf("mysql_init failed!\n");   
  14.         return EXIT_FAILURE;  
  15.     }  
  16.   
  17.     // 步驟2:實際進行連接  
  18.     // 參數分別爲,conn連接句柄,host是MySQL所在主機或地址,user用戶名,password密碼,database_name數據庫名,後面的都是默認  
  19.     conn = mysql_real_connect(conn, "host""user""password""database_name", 0, NULL, 0);  
  20.   
  21.     if (conn) { // 連接成功  
  22.         printf("Connection success!\n");      
  23.     } else {  
  24.         printf("Connection failed!\n");   
  25.     }  
  26.   
  27.     // 步驟3: 退出前關閉連接  
  28.     mysql_close(conn);  
  29.   
  30.     return 0;  
  31. }  

編譯和運行:
[cpp] view plain copy
  1. gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app  



錯誤處理


錯誤處理的兩個函數:

[cpp] view plain copy
  1. // 返回錯誤碼  
  2. unsigned int mysql_errno(MYSQL *connection);  
  3. // 返回錯誤詳細信息  
  4. char* mysql_error(MYSQL *connection);  
注意,當調用conn = mysql_real_connect(...),  時會遇到一個問題,因爲它在失敗時返回NULL指針,並沒有提供一個錯誤碼。但如果是將句柄作爲一個變量,那麼即使mysql_real_connect失敗,也仍然能夠處理它。
[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include "mysql.h"  
  4. #include "errmsg.h"  
  5. #include "mysqld_error.h"  
  6.   
  7. void Error(MYSQL* conn) {  
  8.     printf("Connection error %d: %s\n", mysql_errno(conn), mysql_error(conn));  
  9. }  
  10.   
  11. int main (int argc, char *argv[]) {  
  12.   
  13.     MYSQL conn; // 是變量而不是指針  
  14.   
  15.     mysql_init(&conn); // 注意取地址符&  
  16.   
  17.     if (mysql_real_connect(&conn, "192.168.137.246""root""123456""test", 0, NULL, 0)) {  
  18.         printf("Connection success!\n");  
  19.         mysql_close(&conn);  
  20.     } else {  
  21.         fprintf(stderr, "Connection failed!\n");  
  22.         if (mysql_errno(&conn)) {  
  23.             fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&conn), mysql_error(&conn));  
  24.         }  
  25.     }  
  26.     return EXIT_SUCCESS;  
  27. }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章