第18卷第1期 黄石高等专科学校学报 E vd.18 N0.1 2O02年3月 JOURNAL OF HUANGSHI POLYTECHNIC C0L脚Mar.龇 MySQL中访问数据库的程序设计 赵洪明 (黄石高等专科学校工商管理系,湖北黄石435003) 摘要MySQL是一个精巧的数据库管理系统,C语言是其最基本、最低级的编程接D。本文简述了利用c程序 MySQL数据库管理系统C语言交互查询 访问MySQL数据库服务器的方法,并举一应用实例。 关键词中围分类号:TP311 文献标识码A 文章编号:1008—8245(2002)01—0010—03 1概述 c语言是一种被广泛使用的编程语言,几乎 可以在任何领域开发应用程序。C还是MySQL 数据库管理系统最基本、最低级的应用程序编程 接ISl(Application Pros ̄Iraefface,简称API)。近 几年,虽然PHP因其免费、跨平台、运行于服务器 以及可嵌入HTML等优点,被很多人用来开发基 于Web的应用程序或数据库,但C由于相对 2与数据库服务器建立连接的方法 首先必须建立与MySQL数据库服务器的连 接,这是实现访问数据库的任何功能的基础。换 句话说,它是后续功能程序的公用代码,因而可把 连接功能编写成一个可以调用的过程。下面是建 立与数据库服务器的连接和断开源程序myplx ̄ arn・c。 #ielnude"stdio.I1" #i ̄lude"mysq1.h 因素较少,较PHP等脚本程序占用更少的内存, 且执行效率更高,因而常常用来编写使用频繁的 客户机程序。 /*定义主机名、用户名、密码、数据库名及端 口号等人口参数,并设定为缺省值*/ 鼻define host-came ⅡL 鼻defineIIS, ̄'F-naIIfleNULL defme possword NULL #define database NULL c API代码是随MySQL分发的,它包含在 mysqlelient库且允许C程序存取一个数据库。在 MySQL源代码分发包中,有很多客户机程序是用 C编写的。可以在/usr/local/mysqX/include或/ o,sr/indude/mysq|目录下找到演示使用C API的 程序例子。由于c API编程实际上是调用MySQL 对c语言设计的库函数,所以,C API编程实际上 就是c语言编程,同样需要经过编译、连接才能 生成可执行程序。另外,基于Ⅱnux版本的 M L是完全免费的自由软件,可以随意拷贝或 修改。因此,下面是在MySQL安装在Linux平台 上的假设前提下.讨论通过c编程访问数据库的 方法。 收藕日期:2001—09—18 MYsQL*coral; 类型结构*/ /*初始化一个MYsQL /*建立一 main(int argc,char*a/gv[]); 个新连接,将连接地址赋予conn*/ if(COILrl==NULL) 功*/ /*检查连接是否成 }fpnn ̄tf(stderr, init—eormnetion falIed.、 n );/*无法连接,输出失败信息*/ e:dt(1);} 作者简介:赵洪明(1967一),女,河北南宫人,讲师,主要从事计算机应用专业的教学和研究工作 维普资讯 http://www.cqvip.com
第1期 赵洪明:MySQL中访问数据库的程序设计 if(mysql—real-connect(corm. 成功的返回地址*/ /*指向连接 £ ted.\fIJr,(uJ18i ed long)mysql—affected—DDWS (q2onl1));j else host—llal ̄e,/*连接主机名*/ u辩r—naⅡ ,/*用户名*/ possword,/*用户密码*/ 嘶 Insert actionfailed.、 ); 处理返回结果集时,通常使用mysql—store— database, 0. 0) ==/*指定缺省连接的数据库*/ /*缺省连接套接字*/ result和mysql—I|se— uJt两个函数产生结果集, 若查询成功返回 ̄回NULL。如: MYSQL—R酷 result if(mysql~query(conll, SHOW TABLES FROM s11^Ⅱ )!=0) /*缺省连接的端口号*/ /*标志位*/ L-RES类型的指针,否则返 NULL, NULL) /*调用错误信息函数检错*/ {fp ̄mtf(stderr,”real—conncclion kd、 nerlDr:%u,%S\ ,my 一cITnO(conn),唧 ~ ( Ql哪failed 、 ); else eITor(c0nn)); t(1);} {result:mysql—StOle—esrult(corn); mysql-dose(); */ /*关闭对话,断开连接 fi(result::NULL) prinff( Query led 、 ); else mysqlfree~—exit(O);} 需要说明的是,前面出现的MySQL是数据库 管理系统的名称,是~个软件产品的标志;r ̄SQL 是MySQL规定的客户机库中的一种数据结构,用 于连接处理程序;my'sql则是MySQL下的一个客 户机程序,是用户与数据库服务器交互查询的主 要渠道。 result(result};}/*处理查询结 果集*/ 4编译与连接 在Linux中,最常用的编译器是gcc。其编译 源程序的命令格式为: 8 gcc<head丘 0n path> 一c program.c 3实现交互式查询 建立与数据库服务器的连接之后,下面的工 作就是如何控制与服务器的对话,即实现与服务 因此,若要编译一个包含Ⅱ .h头文件的 源程序时,需要指定头文件的路径,即: Bgcc—l/usrZlocal/mysql/ine ̄d ̄一c lllyp ̄O・ gram・c 器的交互。它包括向服务器发布查询和处理查询 结果两个过程。 MySQL的C API中有mvsql—query和mysql— real query丽个函数,专门用于发布查询。它们 将一个指定为空终结串的查询发布到数据库服务 ¥gcc—l/usr/include/mysql—c mHIrI raⅡI.c 编译后产生一个myprogram.0形式的目标文 件,需要再将它连接为可执行程序myprog ̄m.exe: ¥gce一0 mypragramInwm唔【趣n.0一L/ ̄r/lo- 器中运行,运行成功返回0,否则返回非0值 查 询分为返回结果集的查询和不返回结果集的查 询。处理不返回结果集的查询时,只需在调用发 cal/mysql/lib—l n驴(【kueIlt ¥gee一0脚yl邛哩 m脚yl加 舢.0一lJ,. ̄r/ lib/mysql~l mysqldient 布函数时加上一段台法的sQL语句作参数, MYSQL就会执行指定的命令。如: if(mysql—query(amn, INSERT INTO new— 这个过程需要客户机库中mysqldient的支 持 为了在连接时将它包含进去。必须使用一L <path>如一u sI/1oc ,mysqL,lib,指出连接程序 应在哪里找到它。 当然,也可以通过建立一个Makefile文件。使 甩rnake工具对诼程序进行编译,并连接产生目标 文件。这种方法较命令行的形式要方便灵活得多。 member(nanle,age,sex)VALuES( .rmI】Jr。25, ) ) =0) {printf( The table has changed.、n ); pnntf( [ilsell action succeeded-%h lOWS af- 维普资讯 http://www.cqvip.com
l2 黄石高等专科学校学报 20O2拄 bufer[sizeof(bufer)一1]:.\0 ; 5应用实例 下面的程序允许用户在终端上输入密码登录 数据库服务器(即建立与数据库的连接),登录成 功后输出相关内容(即对数据库进行处理),然后 关闭对话,退出MrSQL ̄本程序可以按照前述方 法进行编译,生成可执行文件。 #include stdio.h #include s ̄lib h password=buffer; . while(*optarg)*optarg++=”;j break; ease P :port一1211111=(unsigned)atoi(opy. arg);break; case s :sockemame=optarg;t} argc一=optnd;i +=optind; /*登录并校验密码*/ #include getopt.h #define defhosrneNULL tmI~—.f(嶝>0) {database=a [0]; ++argt ̄;一一argc;{ #define def~userI1aⅡIe NULL —#define clefpaqssword NULL ~fi(needpE —)password get—try—pass. #define def曲~~一J1ameNULL —word(NULL); c01lrl=mysql—#define defsocketnfltll'le NULL #define defport—I ~NULL r ̄rYSQL*(301111 inin(NULL); if(eonn==Mu ) {prlntf( Connectionfailed.、 ): exit(1);t if(mT ̄l—realCOIll ̄et(c0衄,hostname,u —char groups[]={ client ,nIlllI; sttuct op6ou long—options[』_{J”hosWame , . quired——ILrgl ̄13ent,NUL, h },{ uselnalnet ̄,required —noJl-le,password,port—ntlm,snekemame,a,,ss): acgmnent,NULL, u },{ pass ̄ord ,re red—argu— NULL) mertt,NULL, P },{”port",requiredNULL, P {,{ seeker',required一ILrgl ̄13ent, ;printf(”Connection failed.、 ); prnf(i Please cheek your LLq ̄Inall' ̄mad pass. word 、n ); 哪啪t,NULL, s’j,{0,0,0,0I1; main(nit argc,char*argv[]) {char*hostname=defhost——eitx(I)i} nan1e, user- m'SQL—RES g-result; f(mysqlquery(corm, SELECT*FROM staft. —IIBll'I ̄:def—user—n —, password=def——pass. new—word, seketnname=defsocketno.rI ̄,*datdbdse =clefdb—mer1 ̄3ef')!=0)/*输出数据记录*/ p ̄ff( Query- kd.、n ): else result=mysql——lqu2rlfle, orpt~~[1130]; ——unsi 1311111=defport—hum; hat i,c,optindex,needpassword=0; store—result(corm); load—de ra1llb( Ⅱ ,groups,&argc,&argv); , h:P:h:P: if(result==Nuu ) wkile((c=getopt—long(a , s ,longoptions,&0pl——prir ( Query failed.、13. ): else nidex))!=eof) {s ̄tch(c) case h :hosmate=optnarg;break: case u :11sei-riaJrlle optarg;break; uh(㈣,result);/*若需要 更多的信息,将编写的其他函数加入dowith一— —— a4thido,result即可*/ reemysqlf——Cfllse P : !optarg)need-password=1: else{(void)strepy(bnuffer,optarg.  ̄izeof(bllfer)一1); result(result);}l e ̄t(O); (下转第24页) 维普资讯 http://www.cqvip.com
黄石高等专科学校学报 2002年 单片机可以在主程序进行系统初始化以后的任伺 地方响应中断并运行中断处理程序 3 结束语 样机在试用期间,工作稳定,性能可靠,使用方 便,操作简单 伪随机码的时钟频率从1 221kHz一 1.25MHz可变,噪声输出V P—p从O一5V可调,串行 码元速率从1.221kHz一1 23IVlHz可变。利用该产 品可方便我们对通信设备进行维护与检测。 参考文献 图5中断处理流程图 [1:樊昌信.通信原理[M].北京:国防工业出版社 1999 DEsIGN oF A SD PLE ERRoR—CoDE TEST DEVICE P/Daneng (Huangzhong Science and Technology University,Wuhan Hubei 430072) Abstract Inthe system, ̄oises of variablefr。qI1e y and output voltage andtest—codeinwlifch code units and ̄eriog rate can be c} are produced by u GAL device and si咄一chip PIC16C74 Thetest—code 1 be印pliedin a e —codetaletest・ Key ̄'ds pseud ̄-r ∞ qIⅫIoe;noise;eri'lc ̄一code;test (上接第12页) [M].北京;机械工业出版社,∞00 [2] 马跃虹主编.MySQL与电子商务[M].西安:西安交 参考文献 通大学出版社,2001 [1]Paul DuBois著钟鸣等译 MySQL网络数据库指南 [3] 潭措强编c语言程序设计[M].北京:清华大学出 版社,1999 THE PRoGRAMMING OF ACCESS DATABASE IN MYSQL Zhao Hongming (Department of Industrial Commercial Management,Huangshi Polyteetmie College Huangshi Hubei 435003) hJbstra ̄MySQLis a deli.cateDatabase rna ̄ement system,and clanguageistimII basic andthelo ̄rstlevel p interface Inthis article,the a ̄flmr elitiststhe ao。∞sm吐l10dtothe rbtaba8e吕erverin MySQL by usi C program and 8n ppIied er,aa ̄leis 昏Y朗. Seswores MyS ̄)L;C;imemcfive query
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务