利用C API連線資料庫

2021-08-04 09:19:16 字數 3589 閱讀 8556

1. mysql_init():

初始化mysql結構體

2. mysql_real_connect(mysql *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag):

(1). 第乙個引數應該是乙個現存mysql結構的位址。在呼叫mysql_real_connect()之前,你必須呼叫mysql_init()初始化mysql結構。

(2). host值可以是乙個主機名或乙個ip位址。如果host是null或字串」localhost」,假定是到本地主機的乙個連線。如果os支援套接字(unix)或命名管道(win32),使用他們而不是tcp/ip與伺服器連線。

(3). user引數包含使用者的mysql登入id。如果user是null,假定是當前使用者。在unix下,它是當前登入名。在windows odbc下,必須明確地指定當前使用者名字。

(4). passwd引數為user包含口令。如果passwd是null,只有在user表中對於有乙個空白口令欄位的使用者的條目將被檢查乙個匹配。

(5). db是資料庫名。如果db不是null,連線將預設資料庫設定為這個值。

(6). 如果port不是0,值對於tcp/ip連線將用作埠號。注意host引數決定連線的型別。

(7). 如果unix_socket不是null,字串指定套接字或應該被使用的命名管道。注意host引數決定連線的型別。

(8). client_flag值通常是0

3. mysql_query(query,connection):

(1). 必需。規定要傳送的 sql 查詢。注釋:查詢字串不應以分號結束。

(2). 可選。規定 sql 連線識別符號。如果未規定,則使用上乙個開啟的連線。

(3). 返回值:mysql_query() 僅對 select,show,explain 或 describe 語句返回乙個資源識別符號,如果查詢執行不正確則返回 false。

對於其它型別的 sql 語句,mysql_query() 在執行成功時返回 true,出錯時返回 false。

4. mysql_store_result(mysql *mysql):

檢索完整的結果集至客戶端。

5. mysql_num_fields(data)

mysql_num_fields() 函式返回結果集中欄位的數

(1). data:必需。規定規定要使用的資料指標。該資料指標是 mysql_query() 函式產生的結果。

6. mysql_num_rows(data)

mysql_num_rows() 函式返回結果集中行的數目

(1). data:必需。結果集。該結果集從 mysql_query() 的呼叫中得到。

7. mysql_fetch_row(data)

mysql_fetch_row() 函式從結果集中取得一行作為數字陣列

(1). data:必需。要使用的資料指標。該資料指標是從 mysql_query() 返回的結果。

(2). 返回值:返回根據所取得的行生成的陣列,如果沒有更多行則返回 false。

8. mysql_field_count(mysql *mysql)

返回作用在連線上的最近查詢的列數。該函式的正常使用是在mysql_store_result()返回null(因而沒有結果集指標)時。在這種情況下,可呼叫mysql_field_count()來判定mysql_store_result()是否應生成非空結果。

9. mysql_affected_rows(link_identifier)

mysql_affected_rows() 函式返回前一次 mysql 操作所影響的記錄行數。

(1). link_identifier:必需。mysql 的連線識別符號。如果沒有指定,預設使用最後被 mysql_connect() 開啟的連線。如果沒有找到該連線,函式會嘗試呼叫 mysql_connect() 建立連線並使用它。如果發生意外,沒有找到連線或無法建立連線,系統發出 e_warning 級別的警告資訊。

(2). 返回值:執行成功,則返回受影響的行的數目,如果最近一次查詢失敗的話,函式返回 -1。

如果最近一次操作是沒有任何條件(where)的 delete 查詢,在表中所有的記錄都會被刪除,但本函式返回值在 4.1.2 版之前都為 0。

當使用 update 查詢,mysql 不會將原值與新值一樣的列更新。這樣使得 mysql_affected_rows() 函式返回值不一定就是查詢條件所符合的記錄數,只有真正被修改的記錄數才會被返回。

replace 語句首先刪除具有相同主鍵的記錄,然後插入乙個新記錄。該函式返回的是被刪除的記錄數加上被插入的記錄數。

1. mysql

這個結構表示對乙個資料庫連線的控制代碼,它被用於幾乎所有的mysql 函式。

2. mysql_res

這個結構代表返回行的乙個查詢的(select , show , describe ,explain )的結果。從查詢返回的資訊在本章下文稱為結果集合 。

3. mysql_row

這是乙個行資料的型別安全(type-safe)的表示。當前它實現為乙個計數位元組的字串陣列。(如果字段值可能包含二進位制資料,你不能將這些視為空終止串,因為這樣的值可以在內部包含空位元組) 行通過呼叫mysql_fetch_row() 獲得。

4. mysql_field

這個結構包含字段資訊,例如欄位名、型別和大小。其成員在下面更詳細地描述。你可以通過重複呼叫mysql_fetch_field() 對每一列獲得mysql_field 結構。字段值不是這個結構的部分;他們被包含在乙個mysql_row 結構中。

#include

#include

#include

using

namespace

std;

int main()

char

string[200]="select *from test1";

/*查詢指定的,以null終結的字串,若成功返回0*/

if(mysql_query(sock,string))

mysql_res *result; //返回行的查詢結果,返回的資料稱為資料集

unsigned uline=0,ufield=0; //行數,字段數

mysql_row row; //行資料的型別

unsigned

long *lengths;

if(!(result = mysql_store_result(sock)))

uline=(unsigned)mysql_num_rows(result); //獲得行數

ufield=(unsigned)mysql_num_fields(result); //獲得字段數

/*返回作為乙個mysql_field結構的乙個結果集合的乙個列的定義*/

if(result)

cout

else

}}

附:編譯程式的時候在命令後面新增mysql_config --cflags --libs

利用ODBC連線資料庫

例子用到的資料庫是mysql 新增資料來源 建立mfc 基佬於對話方塊的工程odbc 在工程裡新增標頭檔案 include afxdb.h 建立cdatabase類的物件 cdatabase db 接下來就是連線資料庫了,在oninitdialog函式裡新增 判斷資料庫是否開啟 if db.isop...

連線資料庫

2 documents 目錄就是我們可以用來寫入並儲存檔案得地方,一般可通過 nsarray paths nssearchpathfordirectoriesindomains nsdocumentdirectory,nsuserdomainmask,yes nsstring documentsdi...

連線資料庫

1 oracle8 8i 9i資料庫 thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin localhost 1521 orcl orcl為資料庫的sid strin...