用c語言連線mysql資料庫包含兩個步驟:
1.初始化乙個鏈結控制代碼結構;
2.實際進行連線
首先,使用mysql_init來初始化連線控制代碼:
#include
mysql *mysql_init(mysql *);
通常你傳遞null給這個例程,它會返回乙個指向新分配的連線控制代碼結構的指標。如果你傳遞乙個已有的結構,它將被重新初始化,
這個例程在出錯是返回null。
目前為止,你知識分配和初始化乙個結構,你還需要使用mysql_real_connect來向乙個連線提供引數。
mysql *mysql_real_connect(mysql *connection , const char *server_host ,
const char *sql_user_name , const char * sql_password ,const char * db_name ,
unsigned int port_number, const char *unix_socket_name , unsigned int flags);
指標connection必須指向已經被mysql_init初始化過的結構。
server_host既可以是主機名,也可以使ip位址。
sql_user_name 和sql_password的含義和它們的字面含義一樣。如果登入名為null,則假設登入名為當前linux使用者的登入id,如果登入
密碼為null,你將只能訪問伺服器上無需密碼就可以訪問的資料。
port_number和unix_socket_name應該分別是0和null,除非你改變了mysql安裝的預設設定。它們將預設使用合適的值。
最後,flags引數用來對一些定義的位模式進行or操作。
如果無法連線,它將返回null,mysql_error函式可以提供有幫助的資訊。
使用完連線之後,通常程式退出時,你要像下面這樣呼叫函式mysql_close();
void mysql_close(mysql *connection);
這將關閉連線。
mysql_option例程(僅能在mysql_init和mysql_real_connect之間呼叫)可以設定一些選項。
int mysql_option(mysql *connection , enum option_to_set , const char *argument);
因為mysql_option一次只能設定乙個選項,所以設定乙個選項就得呼叫它一次。
enum選項 實際引數型別 說明
mysql_opt_timeout const unsigned int * 連線超時之前等待的秒數
mysql_opt_compress none,使用null 網路連線中使用壓縮機制
mysql_opt_command const char * 每次連線建立後傳送的命令
執行sql語句
執行sql語句的主要api函式被恰當的命名為:
int mysql_query(mysql *connection ,const char *query);
如果成功返回0.
1.不返回資料的sql語句
my_ulonglong mysql_affected_rows(mysql *connection);
返回值是無符號長整型,printf列印時,我們推薦使用%lu將其轉換為無符號長整型。返回的是受之前的sql語句影響的行數。
2.返回資料的語句
一次提取所有資料的函式
mysql_res *mysql_store_result(mysql *connecion);
顯然,你需要在在成功呼叫mysql_query之後使用這個函式。這個函式將立刻儲存在客戶端中返回的所有資料。
在mysql_store_result呼叫成功之後,你需要呼叫mysql_num_rows來得到返回記錄的數目。
my_ulonglong mysql_num_rows(mysql_res *result);
這個函式接受由mysql_store_result返回的結構結構,並返回結構集中的行數。
mysql_row mysql_fetch_row(mysql_res *result);
這個函式從使用mysql_store_result得到的結果結構中提取一行,並把它放到乙個行結構中。當資料用完或發生錯誤時返回
null。
void mysql_data_seek(mysql_res *result , my_ulonglong offset);
這個函式用來在結果集中進行跳轉,設定將會被下乙個mysql_fetch_row操作返回的行。引數offset的值是乙個行號,它必須在
0到結果集總行數減1的範圍內、
mysql_row_offset mysql_row_tell(mysql_res *result);
這個函式返回乙個偏移值,它用來表示結果集中的當前位置。它不是乙個行號,你不能把它用於mysql_data_seek
mysql_row_offset mysql_row_seek(mysql_res *result , mysql_row_offset offset);
這將在結果集中移動當前位置,並返回之前的位置。
一次提取一行資料
mysql _res *mysql_use_result(mysql *connection);
為了逐行提取資料,我們將要使用mysql_use_result而不是mysql_store_result
mysql_res *mysql_use_result(mysql *connection);
mysql_field_count函式提供了一些關於查詢結果的基本資訊,它接受連線物件,並返回結果集中的字段(列)數目
unsigned int mysql_field_count(mysql *conneciton);
#include #include #include "mysql.h"
mysql my_connection;
mysql_res *res_ptr;
mysql_row sqlrow;
void display_row();
int main(int argc, char *argv) else
if (mysql_errno(&my_connection))
mysql_free_result(res_ptr);}}
mysql_close(&my_connection);
} else
}return exit_success;
}void display_row()
printf("\n");
}
C語言使用指標訪問陣列
如果pa指向陣列中的某個元素,那麼pa 1將指向下乙個元素,pa i指向下i個元素。所以,若果pa指向a 0 那麼 pa其實就是a 0 pa 1 就是a 1 pa i 就是a i 根據這個思路,我們可以使用指標來訪問陣列。01 include 02intmain intargc,char argv ...
C語言使用hiredis訪問redis
hiredis是redis資料庫的簡約c客戶端庫。它是簡約的,因為它只是增加了對協議的最小支援,但是同時它使用了乙個高階別的 printf like api,所以對於習慣了 printf 風格的c程式設計使用者來說,其非常容易使用,而且api中沒有明確的繫結每個 redis 命令。github 編譯...
Ubuntu下用C語言訪問MySQL資料庫的方法
由於專案需要,花了兩天時間快速學習mysql,首先複習了資料庫的一些基礎技術,接下來就是在linux下安裝和測試啦。我的mysql伺服器端是安裝在windows下的 windows下的客戶端非常方便方便修改和編輯 在ubuntu下進行開發,之前老闆要求將mysql的庫和標頭檔案放在程式目錄下,盡量不...