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

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

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

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

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

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

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

Mysql的安裝

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

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

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

Mysql API數(shù)據(jù)結構

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

MYSQL

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

MYSQL_RES

MYSQL_RES結構體中包含了查詢結果集,也就是從數(shù)據(jù)庫中查詢到的數(shù)據(jù)?梢允褂胢ysql_store_result或mysql_use_result函數(shù)獲得。

MYSQL_ROW

MYSQL ROW的定義如下:

typedef char **MYSQL_ROW;

可見,它實際上是char **類型,指向一個字符串數(shù)組?梢酝ㄟ^mysql_fetch_row函數(shù)獲得。

MYSQL_FIELD

MYSQL_FIELD中包含了字段名、字段類型和大小等信息?梢灾貜驼{用mysql_fetch_field函數(shù)獲得所有字段的信息。

Mysql C API編程步驟

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

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

#include <mysql.h>

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

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

MYSQL mysql;

3、初始化MYSQL變量。

mysql_init(&mysql);

4、調用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服務器的地址;user--登錄用戶名;passwd--登錄密碼;db--要連接的數(shù)據(jù)庫;port--MYSQL服務器的TCP服務端口;unix_socket--unix連接方式,為NULL時表示不使用socket或管道機制;clientflag--Mysql運行為ODBC數(shù)據(jù)庫的標記,一般取0。連接失敗時該函數(shù)返回0。

5、調用mysql_real_query函數(shù)進行數(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、通過調用mysql_store_result或mysql_use_result函數(shù)返回的MYSQL_RES變量獲取查詢結果數(shù)據(jù)。

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

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);

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

7、調用mysql_fetch_row函數(shù)讀取結果集數(shù)據(jù)。

上述兩種方式最后都是重復調用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型的變量,即字符串數(shù)組,假設為row,則row[i]為第i個字段的值。當?shù)浇Y果集尾部時,此函數(shù)返回NULL。

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

void STDCALL mysql_free_result(MYSQL_RES *result);

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

void STDCALL mysql_close(MYSQL *sock);

Mysql C API編程實例

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

1、創(chuàng)建一個Win32 Console Application(Win32控制臺程序)的空工程(創(chuàng)建空工程需要在向導的Application Settings一步中,勾選Empty project),名稱就取為mysql。

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

3、新建一個cpp文件,取名mysql.cpp。

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

#include <WinSock2.h>

#include <mysql.h>

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

這里要注意,因為mysql用到了網(wǎng)絡連接的接口函數(shù),所以需要在前面包含WinSock2.h文件。

同時本例中使用了輸出流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服務器,本例使用本機作為服務器。訪問的數(shù)據(jù)庫名稱為“msyql”,參數(shù)中的user為你的登錄用戶名,***為登錄密碼,需要根據(jù)你的實際用戶進行設置

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;

}

// 存儲結果集

res = mysql_store_result(&mysql);

if (NULL == res)

{

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

return 0;

}

// 重復讀取行,并輸出第一個字段的值,直到row為NULL

while (row = mysql_fetch_row(res))

{

cout << row[0] << endl;

}

// 釋放結果集

mysql_free_result(res);

// 關閉Mysql連接

mysql_close(&mysql);

return 0;

}

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

如果你跟雞啄米一樣使用的是mysql的64位版本,此時程序會報錯,有很多不能解析的符號,這是因為我們的工程是32位的,應該改為64位,方法是,上面的工程屬性頁的右上角有個Configuration Manager按鈕,點擊它彈出Configuration Manager對話框,下面的列表中可以看到有我們的工程,Platform列顯示為“Win32”:

 

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

 

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

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

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

分享到:

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