亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Mysql C語言API編程入門講解

系統 2169 0

軟件開發中我們經常要訪問數據庫,存取數據,之前已經有網友提出讓雞啄米講講數據庫編程的知識,本文就詳細講解如何使用Mysql的C語言API進行數據庫編程。
?
?API,全稱Application Programming Interfaces,即應用程序編程接口,我們可以調用這些接口,執行API函數提供的功能。
?
?Mysql C語言API就是用C語言編寫的Mysql編程接口,使用這些接口函數可以實現對Mysql數據庫的查詢等操作。
?
?Mysql的安裝
?
?要進行Mysql編程首先要在充當Mysql服務器的電腦和本機上都安裝Mysql,服務器上的Mysql用來連接查詢,本機上的Mysql作為開發之用,當然本機也可以兼顧服務器和開發之用。下載Mysql可以到http://www.mysql.com/downloads/mysql/。雞啄米安裝的是“Windows (x86, 64-bit), MSI Installer”版本。
?
?在Mysql安裝過程中,安裝選項一定要選上Development Components下的Client C API library(shared),這樣才會將Mysql API的頭文件和動態庫安裝到電腦中。
?
?安裝完成后,我們編程要用的就是include目錄下的頭文件和lib目錄下的庫文件。
?
?Mysql API數據結構
?
?Mysql API中用到了很多結構體等數據類型,下面就簡單說說常用的幾個數據結構的含義,至于它們的定義雞啄米就不貼了,大家可以到Mysql提供的mysql.h頭文件中查看。
?
?MYSQL
?
?連接數據庫前,必須先創建MYSQL變量,此變量在很多Mysql API函數會用到。它包含了一些連接信息等數據。
?
?MYSQL_RES
?
?MYSQL_RES結構體中包含了查詢結果集,也就是從數據庫中查詢到的數據。可以使用mysql_store_result或mysql_use_result函數獲得。
?
?MYSQL_ROW
?
?MYSQL ROW的定義如下:
?
?typedef char **MYSQL_ROW;
?
?可見,它實際上是char **類型,指向一個字符串數組。可以通過mysql_fetch_row函數獲得。
?
?MYSQL_FIELD
?
?MYSQL_FIELD中包含了字段名、字段類型和大小等信息。可以重復調用mysql_fetch_field函數獲得所有字段的信息。
?
?Mysql C API編程步驟
?
?1、首先我們要包含mysql的頭文件,并鏈接mysql動態庫。即添加以下語句:
?
?#include <WinSock2.h> // 進行網絡編程需要winsock2.h
?
?#include <mysql.h>
?
?#pragma comment(lib, “libmysql.lib”)
?
?2、創建MYSQL變量。如:
?
?MYSQL mysql;
?
?3、初始化MYSQL變量。
?
?mysql_init(&mysql);
?
?4、調用mysql_real_connect函數連接Mysql數據庫。mysql_real_connect函數的原型如下:
?
?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);
?
?參數說明:mysql--前面定義的MYSQL變量;host--MYSQL服務器的地址;user--登錄用戶名;passwd--登錄密碼;db--要連接的數據庫;port--MYSQL服務器的TCP服務端口;unix_socket--unix連接方式,為NULL時表示不使用socket或管道機制;clientflag--Mysql運行為ODBC數據庫的標記,一般取0。連接失敗時該函數返回0 托福答案
?
?5、調用mysql_real_query函數進行數據庫查詢。mysql_real_query函數的原型如下:
?
?int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
?
?參數說明:mysql--前面定義的MYSQL變量;q--SQL查詢語句;length--查詢語句的長度。
?
?查詢成功則該函數返回0。
?
?6、通過調用mysql_store_result或mysql_use_result函數返回的MYSQL_RES變量獲取查詢結果數據。
?
?兩個函數的原型分別為:
?
?MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
?
?MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
?
?這兩個函數分別代表了獲取查詢結果的兩種方式。第一種,調用mysql_store_result函數將從Mysql服務器查詢的所有數據都存儲到客戶端,然后讀取;第二種,調用mysql_use_result初始化檢索,以便于后面一行一行的讀取結果集,而它本身并沒有從服務器讀取任何數據,這種方式較之第一種速度更快且所需內存更少,但它會綁定服務器,阻止其他線程更新任何表,而且必須重復執行mysql_fetch_row讀取數據,直至返回NULL,否則未讀取的行會在下一次查詢時作為結果的一部分返回,故經常我們使用mysql_store_result 雅思答案
?
?7、調用mysql_fetch_row函數讀取結果集數據。
?
?上述兩種方式最后都是重復調用mysql_fetch_row函數讀取數據。mysql_fetch_row函數的原型如下:
?
?MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
?
?參數result就是mysql_store_result或mysql_use_result的返回值。
?
?該函數返回MYSQL_ROW型的變量,即字符串數組,假設為row,則row[i]為第i個字段的值。當到結果集尾部時,此函數返回NULL。
?
?8、結果集用完后,調用mysql_free_result函數釋放結果集,以防內存泄露。mysql_free_result函數的原型如下:
?
?void STDCALL mysql_free_result(MYSQL_RES *result);
?
?9、不再查詢Mysql數據庫時,調用mysql_close函數關閉數據庫連接。mysql_close函數的原型為:
?
?void STDCALL mysql_close(MYSQL *sock);
?
?Mysql C API編程實例
?
?這里給大家一個簡單的Mysql API編程實例。使用VS2010編寫。訪問的數據庫為安裝Mysql后默認創建的名稱為“mysql”的數據庫,查詢其“user”表的數據,步驟如下:
?
?1、創建一個Win32 Console Application(Win32控制臺程序)的空工程(創建空工程需要在向導的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動態庫。
?
?#include <WinSock2.h>
?
?#include <mysql.h>
?
?#pragma comment(lib, “libmysql.lib”)
?
?這里要注意,因為mysql用到了網絡連接的接口函數,所以需要在前面包含WinSock2.h文件。
?
?同時本例中使用了輸出流cout,所以還要包含輸入輸出流頭文件:
?
?#include <iostream>
?
?using namespace std;
?
?5、創建main函數,并修改函數體如下:
?
?int main()
?
?{
?
?MYSQL mysql;
?
?MYSQL_RES *res;
?
?MYSQL_ROW row;
?
?// 初始化MYSQL變量
?
?mysql_init(&mysql);
?
?// 連接Mysql服務器,本例使用本機作為服務器。訪問的數據庫名稱為“msyql”,參數中的user為你的登錄用戶名,***為登錄密碼,需要根據你的實際用戶進行設置
?
?if (!mysql_real_connect(&mysql, “127.0.0.1”, “user”, “123”, “mysql”, 3306, 0, 0))
?
?{
?
?cout << “mysql_real_connect failure!” << endl;
?
?return 0;
?
?}
?
?// 查詢mysql數據庫中的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動態庫文件拷貝到工程的當前目錄,運行程序。
?
?如果你跟雞啄米一樣使用的是mysql的64位版本,此時程序會報錯,有很多不能解析的符號,這是因為我們的工程是32位的,應該改為64位,方法是,上面的工程屬性頁的右上角有個Configuration Manager按鈕,點擊它彈出Configuration Manager對話框,下面的列表中可以看到有我們的工程,Platform列顯示為“Win32”:
?
?
?
?這里需要點擊右側的箭頭下拉,選擇New彈出New Project Platform對話框,New platform選擇x64創建新Platform:
?
?
?
?上述的Platform列選擇x64就可以了。再次運行程序,你會發現它果然不報錯了。
?
?本文就到這里了,到此大家應該對Mysql C API編程有了基本的了解了,在實際開發中可以不斷深入研究。
?

Mysql C語言API編程入門講解


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产做国产爱免费视频 | 国产精品成人观看视频免费 | 国产高清国内精品福利 | 国产精品久久精品牛牛影视 | 久久国产片 | 亚洲精品高清国产一线久久97 | 狠狠干欧美 | 日本高清毛片视频在线看 | 精品一区二区三区免费爱 | 亚洲综合色婷婷在线观看 | 久操青青 | 午夜香蕉网 | 亚洲精品资源在线 | 天天爱天天做久久天天狠狼 | 国产永久免费爽视频在线 | 高清毛片在线看高清 | 亚洲精品国产成人99久久 | 在线欧美69v免费观看视频 | 亚洲一区欧美日韩 | 日韩欧美视频免费观看 | 91精品免费不卡在线观看 | 香蕉毛片 | 在线观看视频91 | 国产精品u任我爽爆在线播放 | 亚洲天天操 | 精品96在线观看影院 | 久久免费视频网 | 国模和精品嫩模私拍视频 | 国产女主播在线视频 | 亚洲日本中文字幕 | 亚洲精品久久精品h成人 | 日本成人tv| 99热成人精品热久久66 | 在线综合+亚洲+欧美中文字幕 | 亚洲精品日韩中文字幕久久久 | 国产精品99精品久久免费 | 99热久久国产精品这里小说 | 奇米影视久久 | 亚洲国产欧美精品一区二区三区 | 亚洲精品人成无码中文毛片 | 综合一个色 |