999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C語言訪問MySQL數(shù)據(jù)庫的研究與實(shí)現(xiàn)

2017-07-06 10:29:04趙衛(wèi)東周曉清劉永紅葉安勝
關(guān)鍵詞:數(shù)據(jù)庫

鄢 濤, 趙衛(wèi)東, 周曉清, 劉永紅, 葉安勝, 余 悅

(1.成都大學(xué) 信息科學(xué)與工程學(xué)院, 四川 成都 610106;2.成都大學(xué) 模式識別與智能信息處理四川省高校重點(diǎn)實(shí)驗(yàn)室, 四川 成都 610106)

?

基于C語言訪問MySQL數(shù)據(jù)庫的研究與實(shí)現(xiàn)

鄢 濤1,2, 趙衛(wèi)東1,2, 周曉清1,2, 劉永紅1,2, 葉安勝1,2, 余 悅1

(1.成都大學(xué) 信息科學(xué)與工程學(xué)院, 四川 成都 610106;2.成都大學(xué) 模式識別與智能信息處理四川省高校重點(diǎn)實(shí)驗(yàn)室, 四川 成都 610106)

分析了在Windows平臺下如何利用MySQL提供的驅(qū)動支持,通過配置VC和VS 2個常用IDE,最后實(shí)現(xiàn)C語言訪問MySQL的規(guī)范和詳盡的流程.該流程為C語言操作MySQL并進(jìn)行應(yīng)用程序開發(fā)提供了完美解決方案.

C語言;MySQL;VC;VS

0 引 言

C語言是一門通用計(jì)算機(jī)編程語言,因其靈活、跨平臺與高效等特點(diǎn),從微控制器嵌入到超級計(jì)算機(jī)開發(fā)等均被廣泛采用[1].MySQL是一個開源的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management,RDBMS),采用通用的結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)進(jìn)行數(shù)據(jù)管理,被廣泛應(yīng)用于以Web應(yīng)用為代表的程序開發(fā)與應(yīng)用,尤其是不需要事務(wù)化處理的場合[2-5].本研究討論了在Windows環(huán)境下如何利用MySQL提供的支持文件,通過配置VC和VS,最后實(shí)現(xiàn)C語言訪問MySQL的完美解決方案.

1 獲取MySQL的驅(qū)動

1.1 安裝和驗(yàn)證MySQL

MySQL軟件可以直接到MySQL官方網(wǎng)站(https://www.mysql.com/downloads/)獲取,也可以通過Orcale網(wǎng)站(https://www.oracle.org/downloads/)獲取.其安裝過程比較簡單,本研究不做詳細(xì)介紹,但有一點(diǎn)要特別強(qiáng)調(diào):以MySQL5.0的安裝過程為例,在“Choose Setup Type"(選擇安裝類型)時,需選擇“Complete"(完全)安裝方式(如果是MySQL 5.7,則選擇Full選項(xiàng)),只有這樣,才能獲得需要的驅(qū)動.

需要說明的是,在嘗試使用C語言訪問MySQL之前,首先應(yīng)該確保MySQL能被正確訪問.驗(yàn)證方式通常有2種:命令行方式與使用可視化工具軟件,如Navicat for MySQL等.

以命令行方式為例加以說明如下:打開Windows控制臺窗口,在DOS提示符下輸入命令(設(shè)當(dāng)前路徑為C盤根目錄):

c:>mysql -h 服務(wù)器 -u 用戶名 -p

Enter password:******

說明:h、u、p分別表示host(主機(jī))、username(用戶名)、password(密碼);服務(wù)器為安裝和提供MySQL服務(wù)的服務(wù)器IP地址,本機(jī)則為“l(fā)ocalhost";用戶名表示訪問MySQL的賬戶;******表示賬戶相應(yīng)的密碼.

確定后,如果命令提示符變?yōu)椤癿ysql>",則表示連接成功,程序可以正常訪問MySQL(見圖1).

圖1 命令行方式測試MySQL連接

1.2 獲取MySQL的驅(qū)動

JAVA、C#等編程語言之所以能夠直接訪問數(shù)據(jù)庫,是因?yàn)镋clipse、VS等IDE中已經(jīng)包含了對數(shù)據(jù)庫的支持,代碼中直接引用相關(guān)的驅(qū)動即可(JAVA中引用jar包,C#中引用名空間).同理,VC和VS不能直接操作MySQL數(shù)據(jù)的原因也正是在于2個IDE都沒有提供相應(yīng)的數(shù)據(jù)庫驅(qū)動.因此,正確地獲取MySQL驅(qū)動,是C語言操作數(shù)據(jù)庫的前提.

MySQL對C語言的支持包括庫文件(.lib)與頭文件(.h)二部分,由于涉及到版本兼容性問題,所以二者并沒有統(tǒng)一通用的標(biāo)準(zhǔn)驅(qū)動文件.要獲得與要訪問的MySQL相匹配的驅(qū)動,最簡單、最直接的辦法就是到MySQL的安裝目錄下去查找.前提是安裝MySQL的過程中,在“Choose Setup Type"(選擇安裝類型)時,選擇“Complete"(完全)安裝方式.假設(shè)MySQL的安裝目錄為“C:Program FilesMySQLMySQL Server 5.0",這個文件夾下有若干個子文件夾,其中include和lib就是本研究所需要的(見圖2).

圖2 MySQL安裝目錄下的include和lib文件夾

2 配置開發(fā)環(huán)境

2.1 配置Visual C++ 6.0開放環(huán)境

首先,需要將include和lib文件夾配置到VC的安裝目錄下(設(shè)VC的安裝目錄為“C:Program FileVisual C++ 6.0"),那么,在該目錄下有個VC98文件夾,進(jìn)入該文件夾,可以看到ALT、bin、include、lib等若干文件夾.具體步驟為:其一,將前面獲取到的驅(qū)動文件夾include中與mysql相關(guān)文件,全部復(fù)制到VC98include文件夾中;其二,將前面獲取到的驅(qū)動文件夾lib中與mysql相關(guān)文件,全部復(fù)制到VC98lib文件夾中.為了簡化操作,可將2個驅(qū)動文件夾中的文件分別全部復(fù)制到VC98下對應(yīng)的include和lib中.

2.2 配置Visual Studio開發(fā)環(huán)境

VS的配置與VC基本相同,設(shè)VS安裝目錄為“C:Program FilesMicrosoft Visual Studio 12.0"(12.0對應(yīng)VS 2013版本,其他版本對應(yīng)不同的數(shù)字),那么該目錄下也應(yīng)該有VC文件夾.進(jìn)入該文件夾,可以看到in、crt、include、lib等若干文件夾.同樣地,將獲取到的include和lib中的驅(qū)動文件分別全部復(fù)制到VC下對應(yīng)的include和lib中即可.

3 編寫C代碼訪問MySQL

3.1 驅(qū)動加載

驅(qū)動加載,即在程序中引用第三方庫.

首先要做的就是在程序中加載驅(qū)動,在C語言代碼的預(yù)處理處加入如下3行重要代碼,

01 #include

02 #include ″mysql.h″

03 #pragma comment(lib,″libmysql.lib″)

第01行是對網(wǎng)絡(luò)訪問的支持,也可以直接使用頭文件Windows.h;第02行是引入MySQL相關(guān)操作的頭文件;第03行是非常重要的,其作用是將庫libmysql.lib的搜索記錄放置到目標(biāo)文件中去.

如果不在代碼中加入03行語句,也可以采用設(shè)置工程屬性的方法來達(dá)到目的.

VC的設(shè)置方法是:工程→設(shè)置,在“Project Settings"對話框的“連接”選項(xiàng)卡中,將“l(fā)ibmysql.lib"添加“對象/庫模塊"文本框,用空格與已有庫文件分開即可(見圖3).

圖3 VC中設(shè)置工程屬性方法引入MySQL的庫“l(fā)ibmysql.lib"

VS的設(shè)置方法是:項(xiàng)目→屬性→配置屬性→鏈接器→附加依賴項(xiàng),加入“l(fā)ibmysql.lib”庫即可(見圖4).

圖4 VS中設(shè)置工程屬性方法引入MySQL的庫“l(fā)ibmysql.lib"

3.2 建立連接

要訪問并操作MySQL,需要如下一些信息:host(主機(jī)),database(數(shù)據(jù)庫),username(用戶名),password(密碼),port(端口號,默認(rèn)為3306).假設(shè)對應(yīng)參數(shù)分別為:202.115.80.216,cinaction,cdu,cddx,3306,則C語言連接MySQL數(shù)據(jù)庫的參考代碼如下:

01 char host[] = ″202.115.80.216″;/*數(shù)據(jù)庫服務(wù)器*/

02 char dbName[] = ″cinaction″;/*要訪問的數(shù)據(jù)庫名*/

03 const char uname[] = ″cdu″;/*用戶名*/

04 const char pwd[] = ″cddx″;/*密碼*/

05 unsigned int port = 3306;/*端口號*/

06 MYSQL*conn;/*數(shù)據(jù)庫連接指針*/

07 conn = mysql-init((MYSQL*)0);/*初始化數(shù)據(jù)庫連接*/

08 if (!conn)

09 printf(″MySQL init failed! ″);

10 else {

11 conn = mysql-real-connect(conn,host,uname,pwd, dbName,port,NULL,0);

12 if (conn)

13 printf(″Success! ″);

14 else

15 printf(″Connectioin failed! ″);

16 }

17 if (conn != NULL)

18 mysql-close(conn);

上述代碼中,01~05行定義各個參數(shù);06、07行聲明并初始化MySQL連接對象,只有初始化成功,才能進(jìn)行實(shí)際連接;實(shí)際連接(第11行)函數(shù)mysql-real-connect()的倒數(shù)第2個參數(shù)為unix連接方式(NULL表明不使用socket或管道機(jī)制),最后一個參數(shù)是客戶端的一些標(biāo)志及組合,經(jīng)常設(shè)為0.

3.3 數(shù)據(jù)庫操作

數(shù)據(jù)庫操作有很多種,其中,對于數(shù)據(jù)表記錄的增加、刪除、修改與查詢最為常用.這里以操作一個簡單的學(xué)生信息表為例加以說明.設(shè)上述數(shù)據(jù)庫cinaction中有數(shù)據(jù)表student,表結(jié)構(gòu)及示例數(shù)據(jù)如表1所示.

表1 數(shù)據(jù)表student

創(chuàng)建student表的SQL語句為:

CREATE TABLE ′student′ (

′id′ varchar(15) NOT NULL,

′name′ varchar(12) NOT NULL,

′age′ int(11) default ′0′,

PRIMARY KEY (′id′)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

上述SQL語句創(chuàng)建一個數(shù)據(jù)表,有id、name及age 3個字段,缺省字符集為gbk(支持中文).如果實(shí)際運(yùn)行中,在寫入中文字符時仍然報(bào)錯(可能提示“Data too long for column XX at row n",其中XX為要存儲中文信息的列名,n為插入數(shù)據(jù)的行),那么可以在連接數(shù)據(jù)庫完成之后且在處理數(shù)據(jù)之前增加對中文編碼的支持,代碼如下:

if (mysql-query(conn,″set names gbk;″)){

printf(″Set char-set failed. ″);

return;

}

代碼位于程序的第13行處,即if (conn)與else之間.當(dāng)conn條件成立后執(zhí)行該代碼.

下面分別就數(shù)據(jù)庫的4種操作進(jìn)行簡單演示.

1)插入數(shù)據(jù).假設(shè)要插入1條學(xué)生記錄,其學(xué)號、姓名與年齡信息均已獲取并存放在變量newID、newName、newAge中,則對應(yīng)操作代碼如下:

char sql[1000];/*存儲SQL語句的變量*/

sprintf(sql,″insert into student values(′%s′,′%s′,%d)″, newID,newName,newAge);

if (mysql-query(conn,sql))

printf(″Insert failed. ″);

else

printf(″Insert succeed! ″);

如果要插入多條數(shù)據(jù),只需要重復(fù)獲取數(shù)據(jù),組合成不同的插入語句,并執(zhí)行即可.

2)刪除操作.假設(shè)要刪除學(xué)號為201510414101的學(xué)生信息,該學(xué)號通過控制臺接收用戶輸入并存放到字符數(shù)組變量delID中,則代碼如下:

sprintf(sql,″delete from student where id=′%s′″,delID);

執(zhí)行過程類同插入數(shù)據(jù)操作.

3)修改操作.假設(shè)要將學(xué)號為theID的學(xué)生的年齡改為newAge(設(shè)2個變量均已接收并存儲用戶輸入),則相應(yīng)的SQL語句組合如下:

sprintf(sql,″update student set age=%d where id=′%s′″,newAge,theID);

執(zhí)行過程類同插入數(shù)據(jù)操作.

4)查詢(讀取)操作.相比于前3種操作,查詢操作最為復(fù)雜,因?yàn)槌藞?zhí)行查詢語句外,還要對讀取到的數(shù)據(jù)進(jìn)行處理.假設(shè)要查詢name字段中包含keyword關(guān)鍵字的學(xué)生id和name并顯示出來,相應(yīng)代碼如下:

01 sprintf(sql,″select id,name from student where name like ′%%%s%%′″,keyword);

02 MYSQL-RES*res;/*存儲MySQL結(jié)果集*/

03 MYSQL-ROW row;/*行變量*/

04 if (mysql-query(conn,sql)){

05 printf(″Select failed. ″);

06 }

07 else{

08 res = mysql-store-result(conn);/*獲取查詢結(jié)果集*/

09 int num = (int)mysql-num-rows(res);/*獲取查詢結(jié)果記錄數(shù)*/

10 if (num>0){

11 printf(″共有 %d 個符合條件的學(xué)生: =========== ″,num);

12 printf(″學(xué)號姓名 ″);

13 printf(″--------------------- ″);

14 row = mysql-fetch-row(res);/*獲取1行信息*/

15 while (row != NULL){

16 printf(″%-15s%-14s ″,row[0],row[1]);/*輸出當(dāng)前行信息*/

17 row = mysql-fetch-row(res);

18 }

19 printf(″--------------------- ″);

20 }

21 else

22 printf(″ 沒有符合條件的學(xué)生信息 =========== ″);

23 mysql-free-result(res);

24 }

上述代碼第01行動態(tài)生成SQL語句,其中“…name like ‘%%%s%%’”,前后連續(xù)的%%是C語言中的特殊用法,實(shí)際輸出時表示1個%,假設(shè)中間的格式控制符%s對應(yīng)的keyword為“子",則最后生成的SQL字符串為“…name like ‘%子%’”,在SQL中為模糊查詢,表示查詢name中包含“子"字的記錄.第08行獲取查詢的結(jié)果集,存放到變量res中;第09行獲取記錄數(shù);第11~19行輸出結(jié)果記錄,其中第14、17行的mysql-fetch-row(res)的作用是從記錄集res中獲取1行記錄,同時指針向后移動1行;第23行釋放記錄集.

3.4 關(guān)閉連接

當(dāng)數(shù)據(jù)庫操作完成后,使用mysql-close(conn)關(guān)閉連接,釋放資源.雖然已打開的非持久連接會在腳本執(zhí)行完畢后自動關(guān)閉,可以不使用mysql-close(),但是及時主動釋放資源是良好的習(xí)慣.

4 結(jié) 論

C語言是經(jīng)典的程序設(shè)計(jì)語言,但C語言并未直接提供對數(shù)據(jù)庫訪問的支持,使得它在數(shù)據(jù)持久化方面的應(yīng)用比較困難.本研究分析了在Windows平臺下如何利用MySQL提供的驅(qū)動支持,通過配置VC和VS 2個常用IDE,最后實(shí)現(xiàn)C語言訪問MySQL的規(guī)范和詳盡的流程,該流程為C語言操作MySQL并進(jìn)行應(yīng)用程序開發(fā)提供了一個完美解決方案.

[1]葉安勝,鄢濤.C語言綜合項(xiàng)目實(shí)戰(zhàn)[M].北京:科學(xué)出版社,2016.

[2]唐林.一種基于C語言訪問MySQL數(shù)據(jù)庫的研究[J].電腦編程技巧與維護(hù),2016,23(7):57-58.

[3]張麗.基于C語言訪問的MySQL數(shù)據(jù)庫[J].電子技術(shù)與軟件工程,2016,5(22):165-166.

[4]趙洪明.MySQL中訪問數(shù)據(jù)庫的程序設(shè)計(jì)[J].湖北理工學(xué)院學(xué)報(bào),2002,18(1):10-12.

[5]馮祖洪,李映姝.Linux下的數(shù)據(jù)庫MYSQL訪問技術(shù)[J].現(xiàn)代電子技術(shù),2001,25(4):7-10.

Research on and Implementation of MySQL Accessing Based on C Programming Language

YANTao1,2,ZHAOWeidong1,2,ZHOUXiaoqing1,2,LIUYonghong1,2,YEAnsheng1,2,YUYue1

(1.School of Information Science and Engineering, Chengdu University, Chengdu 610106, China;2.Key Laboratory of Pattern Recognition and Intelligent Information Processing of Higher Education of Sichuan Province,Chengdu University, Chengdu 610106, China)

This paper analyzes how to make full use of the drive provided by MySQL,and how to obtain the norms and the detailed process of C programming language's access the MySQL through the configuration of two commonly used IDE,namely VC and VS.Practically,this process serves as a perfect solution for the operation of MySQL by C programming language and for the application development too.

C programming language;MySQL;VC;VS

1004-5422(2017)02-0161-04

2017-05-02.

四川省科技廳軟科學(xué)研究計(jì)劃(2017ZR0198)資助項(xiàng)目.

鄢 濤(1973 — ), 男, 碩士, 副教授, 從事計(jì)算機(jī)軟件工程研究.

TP311.13;TP312

A

猜你喜歡
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
主站蜘蛛池模板: 午夜综合网| 国产a网站| 亚洲国产日韩欧美在线| 亚洲国产欧美中日韩成人综合视频| 国产91丝袜| 在线观看国产精品一区| 99无码熟妇丰满人妻啪啪| 国产va在线观看| 亚洲色图欧美在线| 色网站免费在线观看| 91久久精品国产| 午夜欧美在线| 婷婷亚洲天堂| 欧美黄色a| 亚洲色图欧美一区| 国产精品专区第1页| 国产69精品久久久久妇女| 国产福利小视频在线播放观看| 2020国产免费久久精品99| 国产成人三级在线观看视频| 亚洲成人高清无码| 亚洲国产精品无码AV| 国产香蕉97碰碰视频VA碰碰看| 久久久精品国产SM调教网站| 亚洲无码高清免费视频亚洲| 9啪在线视频| 美女高潮全身流白浆福利区| 国产一区二区三区精品久久呦| 日韩毛片免费| 国产亚洲精品va在线| 在线观看国产精品日本不卡网| 国产成人精品高清不卡在线| 四虎综合网| 国产精品成人一区二区不卡| 精品人妻AV区| 国产青榴视频在线观看网站| 亚洲精品欧美日韩在线| 欧美色丁香| 亚洲欧美另类色图| 91久久性奴调教国产免费| 欧美一区福利| 99久久国产精品无码| 女人爽到高潮免费视频大全| 天天操天天噜| 无码综合天天久久综合网| 欧美怡红院视频一区二区三区| 日韩欧美国产综合| 国产成人高清精品免费| 国产一国产一有一级毛片视频| 国产亚洲精久久久久久无码AV| 2020久久国产综合精品swag| 国产精品高清国产三级囯产AV| 萌白酱国产一区二区| 国产簧片免费在线播放| 久久激情影院| 乱系列中文字幕在线视频| 日韩一区精品视频一区二区| 欧美日韩资源| www.av男人.com| 91视频首页| 99精品伊人久久久大香线蕉| 91福利一区二区三区| 精品无码日韩国产不卡av| 国产午夜不卡| 欧美在线黄| 色亚洲激情综合精品无码视频 | 999国内精品视频免费| 国产在线精品美女观看| 无码久看视频| 国产主播喷水| 欧美激情二区三区| 一级做a爰片久久毛片毛片| 最新午夜男女福利片视频| 波多野结衣视频一区二区 | 日本AⅤ精品一区二区三区日| 青青久在线视频免费观看| 国产欧美性爱网| 国产精品污视频| 首页亚洲国产丝袜长腿综合| 国产成人综合日韩精品无码首页| 免费人成视网站在线不卡| 亚洲天堂精品在线|