亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊(cè) ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

Mysql C API編程:用C語言編寫的Mysql編程接口

添加時(shí)間:2013-10-27 14:57:03  添加: 思海網(wǎng)絡(luò) 

軟件開發(fā)中我們經(jīng)常要訪問數(shù)據(jù)庫,存取數(shù)據(jù),之前已經(jīng)有網(wǎng)友提出讓雞啄米講講數(shù)據(jù)庫編程的知識(shí),本文就詳細(xì)講解如何使用Mysql的C語言API進(jìn)行數(shù)據(jù)庫編程。

API,全稱Application Programming Interfaces,即應(yīng)用程序編程接口,我們可以調(diào)用這些接口,執(zhí)行API函數(shù)提供的功能。

Mysql C語言API就是用C語言編寫的Mysql編程接口,使用這些接口函數(shù)可以實(shí)現(xiàn)對(duì)Mysql數(shù)據(jù)庫的查詢等操作。

Mysql的安裝

要進(jìn)行Mysql編程首先要在充當(dāng)Mysql服務(wù)器的電腦和本機(jī)上都安裝Mysql,服務(wù)器上的Mysql用來連接查詢,本機(jī)上的Mysql作為開發(fā)之用,當(dāng)然本機(jī)也可以兼顧服務(wù)器和開發(fā)之用。下載Mysql可以到http://www.mysql.com/downloads/mysql/。雞啄米安裝的是“Windows (x86, 64-bit), MSI Installer”版本。

在Mysql安裝過程中,安裝選項(xiàng)一定要選上Development Components下的Client C API library(shared),這樣才會(huì)將Mysql API的頭文件和動(dòng)態(tài)庫安裝到電腦中。

安裝完成后,我們編程要用的就是include目錄下的頭文件和lib目錄下的庫文件。

Mysql API數(shù)據(jù)結(jié)構(gòu)

Mysql API中用到了很多結(jié)構(gòu)體等數(shù)據(jù)類型,下面就簡單說說常用的幾個(gè)數(shù)據(jù)結(jié)構(gòu)的含義,至于它們的定義雞啄米就不貼了,大家可以到Mysql提供的mysql.h頭文件中查看。

MYSQL

連接數(shù)據(jù)庫前,必須先創(chuàng)建MYSQL變量,此變量在很多Mysql API函數(shù)會(huì)用到。它包含了一些連接信息等數(shù)據(jù)。

MYSQL_RES

MYSQL_RES結(jié)構(gòu)體中包含了查詢結(jié)果集,也就是從數(shù)據(jù)庫中查詢到的數(shù)據(jù)。可以使用mysql_store_result或mysql_use_result函數(shù)獲得。

MYSQL_ROW

MYSQL ROW的定義如下:

typedef char **MYSQL_ROW;

可見,它實(shí)際上是char **類型,指向一個(gè)字符串?dāng)?shù)組。可以通過mysql_fetch_row函數(shù)獲得。

MYSQL_FIELD

MYSQL_FIELD中包含了字段名、字段類型和大小等信息。可以重復(fù)調(diào)用mysql_fetch_field函數(shù)獲得所有字段的信息。

Mysql C API編程步驟

1、首先我們要包含mysql的頭文件,并鏈接mysql動(dòng)態(tài)庫。即添加以下語句:

#include <WinSock2.h> // 進(jìn)行網(wǎng)絡(luò)編程需要winsock2.h

#include <mysql.h>

#pragma comment(lib, “l(fā)ibmysql.lib”)

2、創(chuàng)建MYSQL變量。如:

MYSQL mysql;

3、初始化MYSQL變量。

mysql_init(&mysql);

4、調(diào)用mysql_real_connect函數(shù)連接Mysql數(shù)據(jù)庫。mysql_real_connect函數(shù)的原型如下:

MYSQL * STDCALL 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 long clientflag);

參數(shù)說明:mysql--前面定義的MYSQL變量;host--MYSQL服務(wù)器的地址;user--登錄用戶名;passwd--登錄密碼;db--要連接的數(shù)據(jù)庫;port--MYSQL服務(wù)器的TCP服務(wù)端口;unix_socket--unix連接方式,為NULL時(shí)表示不使用socket或管道機(jī)制;clientflag--Mysql運(yùn)行為ODBC數(shù)據(jù)庫的標(biāo)記,一般取0。連接失敗時(shí)該函數(shù)返回0。

5、調(diào)用mysql_real_query函數(shù)進(jìn)行數(shù)據(jù)庫查詢。mysql_real_query函數(shù)的原型如下:

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);

參數(shù)說明:mysql--前面定義的MYSQL變量;q--SQL查詢語句;length--查詢語句的長度。

查詢成功則該函數(shù)返回0。

6、通過調(diào)用mysql_store_result或mysql_use_result函數(shù)返回的MYSQL_RES變量獲取查詢結(jié)果數(shù)據(jù)。

兩個(gè)函數(shù)的原型分別為:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);

這兩個(gè)函數(shù)分別代表了獲取查詢結(jié)果的兩種方式。第一種,調(diào)用mysql_store_result函數(shù)將從Mysql服務(wù)器查詢的所有數(shù)據(jù)都存儲(chǔ)到客戶端,然后讀取;第二種,調(diào)用mysql_use_result初始化檢索,以便于后面一行一行的讀取結(jié)果集,而它本身并沒有從服務(wù)器讀取任何數(shù)據(jù),這種方式較之第一種速度更快且所需內(nèi)存更少,但它會(huì)綁定服務(wù)器,阻止其他線程更新任何表,而且必須重復(fù)執(zhí)行mysql_fetch_row讀取數(shù)據(jù),直至返回NULL,否則未讀取的行會(huì)在下一次查詢時(shí)作為結(jié)果的一部分返回,故經(jīng)常我們使用mysql_store_result。

7、調(diào)用mysql_fetch_row函數(shù)讀取結(jié)果集數(shù)據(jù)。

上述兩種方式最后都是重復(fù)調(diào)用mysql_fetch_row函數(shù)讀取數(shù)據(jù)。mysql_fetch_row函數(shù)的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

參數(shù)result就是mysql_store_result或mysql_use_result的返回值。

該函數(shù)返回MYSQL_ROW型的變量,即字符串?dāng)?shù)組,假設(shè)為row,則row[i]為第i個(gè)字段的值。當(dāng)?shù)浇Y(jié)果集尾部時(shí),此函數(shù)返回NULL。

8、結(jié)果集用完后,調(diào)用mysql_free_result函數(shù)釋放結(jié)果集,以防內(nèi)存泄露。mysql_free_result函數(shù)的原型如下:

void STDCALL mysql_free_result(MYSQL_RES *result);

9、不再查詢Mysql數(shù)據(jù)庫時(shí),調(diào)用mysql_close函數(shù)關(guān)閉數(shù)據(jù)庫連接。mysql_close函數(shù)的原型為:

void STDCALL mysql_close(MYSQL *sock);

Mysql C API編程實(shí)例

這里給大家一個(gè)簡單的Mysql API編程實(shí)例。使用VS2010編寫。訪問的數(shù)據(jù)庫為安裝Mysql后默認(rèn)創(chuàng)建的名稱為“mysql”的數(shù)據(jù)庫,查詢其“user”表的數(shù)據(jù),步驟如下:

1、創(chuàng)建一個(gè)Win32 Console Application(Win32控制臺(tái)程序)的空工程(創(chuàng)建空工程需要在向?qū)У腁pplication Settings一步中,勾選Empty project),名稱就取為mysql。

2、在Solution Explorer窗口的工程名“mysql”上點(diǎn)右鍵,選擇“Properties”,彈出工程的屬性頁,然后在左側(cè)子窗口中,選擇Configuration Properties->VC++ Directories,右側(cè)子窗口中會(huì)顯示一些設(shè)置項(xiàng)列表,然后在Include Directories項(xiàng)中添加Mysql的Include目錄,在Library Directories項(xiàng)中添加Mysql的lib目錄。

3、新建一個(gè)cpp文件,取名mysql.cpp。

4、在mysql.cpp文件中包含mysql頭文件并鏈接mysql動(dòng)態(tài)庫。

#include <WinSock2.h>

#include <mysql.h>

#pragma comment(lib, “l(fā)ibmysql.lib”)

這里要注意,因?yàn)閙ysql用到了網(wǎng)絡(luò)連接的接口函數(shù),所以需要在前面包含WinSock2.h文件。

同時(shí)本例中使用了輸出流cout,所以還要包含輸入輸出流頭文件:

#include <iostream>

using namespace std;

5、創(chuàng)建main函數(shù),并修改函數(shù)體如下:

int main()

{

MYSQL mysql;

MYSQL_RES *res;

MYSQL_ROW row;

// 初始化MYSQL變量

mysql_init(&mysql);

// 連接Mysql服務(wù)器,本例使用本機(jī)作為服務(wù)器。訪問的數(shù)據(jù)庫名稱為“msyql”,參數(shù)中的user為你的登錄用戶名,***為登錄密碼,需要根據(jù)你的實(shí)際用戶進(jìn)行設(shè)置

if (!mysql_real_connect(&mysql, “127.0.0.1”, “user”, “123”, “mysql”, 3306, 0, 0))

{

cout << “mysql_real_connect failure!” << endl;

return 0;

}

// 查詢mysql數(shù)據(jù)庫中的user表

if (mysql_real_query(&mysql, “select * from user”, (unsigned long)strlen(“select * from user”)))

{

cout << “mysql_real_query failure!” << endl;

return 0;

}

// 存儲(chǔ)結(jié)果集

res = mysql_store_result(&mysql);

if (NULL == res)

{

cout << “mysql_store_result failure!” << endl;

return 0;

}

// 重復(fù)讀取行,并輸出第一個(gè)字段的值,直到row為NULL

while (row = mysql_fetch_row(res))

{

cout << row[0] << endl;

}

// 釋放結(jié)果集

mysql_free_result(res);

// 關(guān)閉Mysql連接

mysql_close(&mysql);

return 0;

}

6、將mysql安裝目錄中的libmysql.dll動(dòng)態(tài)庫文件拷貝到工程的當(dāng)前目錄,運(yùn)行程序。

如果你跟雞啄米一樣使用的是mysql的64位版本,此時(shí)程序會(huì)報(bào)錯(cuò),有很多不能解析的符號(hào),這是因?yàn)槲覀兊墓こ淌?2位的,應(yīng)該改為64位,方法是,上面的工程屬性頁的右上角有個(gè)Configuration Manager按鈕,點(diǎn)擊它彈出Configuration Manager對(duì)話框,下面的列表中可以看到有我們的工程,Platform列顯示為“Win32”:

 

這里需要點(diǎn)擊右側(cè)的箭頭下拉,選擇New彈出New Project Platform對(duì)話框,New platform選擇x64創(chuàng)建新Platform:

 

上述的Platform列選擇x64就可以了。再次運(yùn)行程序,你會(huì)發(fā)現(xiàn)它果然不報(bào)錯(cuò)了。

本文就到這里了,到此大家應(yīng)該對(duì)Mysql C API編程有了基本的了解了,在實(shí)際開發(fā)中可以不斷深入研究。

關(guān)鍵字:Mysql、API、數(shù)據(jù)庫

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號(hào):粵B2-20030321-1
網(wǎng)站公安備案編號(hào):44060602000007 交互式欄目專項(xiàng)備案編號(hào):200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開網(wǎng)站