C语言编程之 Unix下数据库通用接口函数.docVIP

C语言编程之 Unix下数据库通用接口函数.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言编程之 Unix下数据库通用接口函数

Unix下数据库的通用接口函数 在Unix环境下,常用的数据库开发方法有ODBC、调用层接口(CLI)、SQL内嵌C语言或利用其他特定的开发工具等。由于不同的开发方法提供给C语言访问数据库的方法及书写方式各不相同,所以如此开发出的数据库应用程序难以在不同开发环境下通用,导致移植性较差,如采用SQL内嵌C语言开发的程序要改为调用层接口(CLI)来编写时,程序中所有的C程序都得进行修改。为此,笔者设计了一套Unix环境下数据库系统的C语言通用接口函数,利用这种通用接口函数,在数据库系统的多种开发环境中移植程序也无需再修改代码,改善了程序的通用性,提高了开发效率。本文介绍这种通用接口函数的设计思想、函数原型设计和应用示例。 设计思想 利用C语言模块化编程方法,将与数据库访问有关的函数(主要是标准的SQL语句)集中于一个模块(DBADM)中,即将所有有关接口的函数“封装”在此模块中,把该模块作为数据访问的“中间件”,提供对通用接口函数的支持。这样,在别的应用模块中访问数据库时,只调用这些通用接口函数即可,避免了直接调用数据库系统提供的数据库访问函数时接口不一致的问题,将数据库应用的C语言源程序部分与数据实际访问部分(DBADM)隔离开来。 同时,采用缓存交换技术,为每个打开的表申请一块内存(全局变量),作为访问数据库的SQL语句进行数据交换的记录缓存区。当使用SQL语句读出数据库中的数据时,先把数据存放在记录缓存区(其值皆转换为字符型)。同样,当将数据写入数据库中时,也先在记录缓存区中进行更新,再利用记录缓存区组装Insert、Update等SQL语句,从而避免了直接使用SQL语句。 这样,我们可为数据库系统的常用开发环境编写相应的数据库接口模块(DBADM),如果要改变开发环境,只需改变MAKEFILE文件的数据库接口模块即可,其他模块可原封不动。函数功能的扩充、修改及完善也只需改动数据库接口模块。这样,不但提高了程序的通用性,而且把程序员从考虑不同接口的重复工作中解脱出来,把精力放在功能应用的设计开发上,从而提高了开发效率。 函数设计 数据库系统的数据访问主要是使用SQL查询语言来进行,相关的数据访问语句主要有Select(查询)、Insert(插入)、Update(更新)、Delete(删除)、RollBack(回滚),Commit(提交)等。通过对几种常用的开发环境对SQL语句调用方法的共性与特性的比较,我们可以将它们定义成一套“通用”的数据库访问函数,供其他程序调用。下面是笔者定义的两个接口函数的主要代码(其他接口函数代码略): /* dbadm.ec Informix-esql */ #include stdio.h #include unistd.h #include ctype.h #include decimal.h $include sqlca; $include sqlda; $include sqltypes; /*最大的可打开表的数目*/ #define MXFILES 20 /*当前打开的表句柄,表记录的长度*/ int iFrx,iSQLRecordLength[MXFILES]; /*表记录的存储缓冲区,已打开的表*/ char szSQLRecordBuffer[MXFILES],szSQLfhl[MXFILES]; /*已打开表各字段类型区*/ char szSQLField_lx[MXFILES]; /*表结构*/ struct sqlda uDesc[MXFILES]; /*SQL语句组装区*/ $char szSQLbuf[1024]; /*打开表*/ DbTableOpen(char *szSelectSQL) { int iIdx,iPostion; /*字段变量指针*/ struct sqlvar_struct uFieldVar; /*参数里没有select,则按标准组装select 语句*/ if (substr(szSelectSQL,“select ”)0)   sprintf(szSQLbuf,“select * from %s”,szSelectSQL); else   strcpy(szSQLbuf,szSelectSQL); /*查找可打开的句柄*/ for (iFrx=0;iFrxMXFILES;iFrx++)   if (szSQLfhl[iFrx]==NULL)    break; if (iFrx==MXFILES) { printf(“ 打开的表太多\n”); exit(-1); } /*申请保留select语句区*/ if ((szSQLfhl[iFrx]=(ch

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档