使用c語言訪問mysql

2021-06-05 22:56:48 字數 3550 閱讀 4035

用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的庫和標頭檔案放在程式目錄下,盡量不...