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

基于C語言訪問MySQL數據庫的研究與實現

2017-07-06 10:29:04趙衛東周曉清劉永紅葉安勝
成都大學學報(自然科學版) 2017年2期
關鍵詞:數據庫

鄢 濤, 趙衛東, 周曉清, 劉永紅, 葉安勝, 余 悅

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

?

基于C語言訪問MySQL數據庫的研究與實現

鄢 濤1,2, 趙衛東1,2, 周曉清1,2, 劉永紅1,2, 葉安勝1,2, 余 悅1

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

分析了在Windows平臺下如何利用MySQL提供的驅動支持,通過配置VC和VS 2個常用IDE,最后實現C語言訪問MySQL的規范和詳盡的流程.該流程為C語言操作MySQL并進行應用程序開發提供了完美解決方案.

C語言;MySQL;VC;VS

0 引 言

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

1 獲取MySQL的驅動

1.1 安裝和驗證MySQL

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

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

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

c:>mysql -h 服務器 -u 用戶名 -p

Enter password:******

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

確定后,如果命令提示符變為“mysql>",則表示連接成功,程序可以正常訪問MySQL(見圖1).

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

1.2 獲取MySQL的驅動

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

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

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

2 配置開發環境

2.1 配置Visual C++ 6.0開放環境

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

2.2 配置Visual Studio開發環境

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

3 編寫C代碼訪問MySQL

3.1 驅動加載

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

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

01 #include

02 #include ″mysql.h″

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

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

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

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

圖3 VC中設置工程屬性方法引入MySQL的庫“libmysql.lib"

VS的設置方法是:項目→屬性→配置屬性→鏈接器→附加依賴項,加入“libmysql.lib”庫即可(見圖4).

圖4 VS中設置工程屬性方法引入MySQL的庫“libmysql.lib"

3.2 建立連接

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

01 char host[] = ″202.115.80.216″;/*數據庫服務器*/

02 char dbName[] = ″cinaction″;/*要訪問的數據庫名*/

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

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

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

06 MYSQL*conn;/*數據庫連接指針*/

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

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行定義各個參數;06、07行聲明并初始化MySQL連接對象,只有初始化成功,才能進行實際連接;實際連接(第11行)函數mysql-real-connect()的倒數第2個參數為unix連接方式(NULL表明不使用socket或管道機制),最后一個參數是客戶端的一些標志及組合,經常設為0.

3.3 數據庫操作

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

表1 數據表student

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

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

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

return;

}

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

下面分別就數據庫的4種操作進行簡單演示.

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

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! ″);

如果要插入多條數據,只需要重復獲取數據,組合成不同的插入語句,并執行即可.

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

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

執行過程類同插入數據操作.

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

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

執行過程類同插入數據操作.

4)查詢(讀取)操作.相比于前3種操作,查詢操作最為復雜,因為除了執行查詢語句外,還要對讀取到的數據進行處理.假設要查詢name字段中包含keyword關鍵字的學生id和name并顯示出來,相應代碼如下:

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

02 MYSQL-RES*res;/*存儲MySQL結果集*/

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

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

05 printf(″Select failed. ″);

06 }

07 else{

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

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

10 if (num>0){

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

12 printf(″學號姓名 ″);

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

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

15 while (row != NULL){

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

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

18 }

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

20 }

21 else

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

23 mysql-free-result(res);

24 }

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

3.4 關閉連接

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

4 結 論

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

[1]葉安勝,鄢濤.C語言綜合項目實戰[M].北京:科學出版社,2016.

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

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

[4]趙洪明.MySQL中訪問數據庫的程序設計[J].湖北理工學院學報,2002,18(1):10-12.

[5]馮祖洪,李映姝.Linux下的數據庫MYSQL訪問技術[J].現代電子技術,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.

四川省科技廳軟科學研究計劃(2017ZR0198)資助項目.

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

TP311.13;TP312

A

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 超清无码熟妇人妻AV在线绿巨人| 国产精品19p| 久久77777| 久久精品人人做人人爽97| 国产精品三级av及在线观看| 日韩美女福利视频| 视频一本大道香蕉久在线播放| 欧美黑人欧美精品刺激| 啪啪永久免费av| 久久香蕉国产线看观看精品蕉| 国内精品视频| 亚洲国产无码有码| 欧美日韩中文字幕二区三区| 日韩精品高清自在线| 午夜久久影院| 國產尤物AV尤物在線觀看| 天天综合色网| 中文字幕一区二区人妻电影| 国产在线视频福利资源站| 久久人搡人人玩人妻精品一| 久草视频中文| 国产9191精品免费观看| 国产成人精品2021欧美日韩| 国产9191精品免费观看| 国产精品亚洲专区一区| 亚洲日韩AV无码精品| 性视频久久| 992Tv视频国产精品| 国产人成在线观看| 亚洲有无码中文网| 九月婷婷亚洲综合在线| 欧洲极品无码一区二区三区| 久久久久亚洲AV成人人电影软件| 正在播放久久| 午夜国产大片免费观看| 国产午夜福利在线小视频| 黄色在线网| 欧美国产中文| 亚洲无码91视频| 日本道综合一本久久久88| 国产尤物在线播放| 日韩精品一区二区深田咏美| 国产情精品嫩草影院88av| 亚洲无码精彩视频在线观看| 国产黄在线免费观看| 中文字幕永久在线看| 亚洲成人播放| 国产精品密蕾丝视频| 久久久久夜色精品波多野结衣| 久久99热这里只有精品免费看 | 国产亚洲精品自在线| 婷五月综合| 99热这里只有精品国产99| 99激情网| 精品国产中文一级毛片在线看| 国产成人精品一区二区三在线观看| 久久精品人人做人人综合试看| 亚洲嫩模喷白浆| 久久综合一个色综合网| 露脸国产精品自产在线播| 亚洲精品第一在线观看视频| 99这里只有精品在线| 在线观看国产小视频| 精品亚洲麻豆1区2区3区| 亚洲视频影院| 国产99视频精品免费观看9e| 亚洲国语自产一区第二页| 国产精品99一区不卡| 思思热在线视频精品| 久久香蕉国产线看精品| 精品中文字幕一区在线| 无码aaa视频| 婷婷综合缴情亚洲五月伊| 2021亚洲精品不卡a| 无码视频国产精品一区二区| 欧美精品v欧洲精品| 亚洲欧美激情小说另类| 中文字幕在线欧美| 午夜国产小视频| 亚洲熟女中文字幕男人总站| 亚洲无码高清免费视频亚洲| 日韩欧美91|