• 网络学院
  • 新手学堂
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
MySQL数据库技术(32)
广告位
  站点:
  • 首 页
  • 最新软件
  • 最新文章
  • 国内软件
  • 国外软件
  • 汉化软件
  • 源码下载
  • 字体下载
MySQL数据库技术(32)
软件发布 MySQL数据库技术(32)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回首页 | 文章首页 | 数据库类 | MySQL Server | MySQL数据库技术(32)

MySQL数据库技术(32)

 

添加时间: 2006-4-24 4:42:52  作者: MySQL教程  阅读次数:134   来源: http://www.d9soft.com

 

 

       

  6.4 客户机程序3—产生连接代码模块
    对于我们的第三个客户机程序,即客户机程序3,通过将它封装到函数do_connect() 和do_disconnect() 中,将使连接和断开代码更加模块化,这样可以很容易地由多个客户机程序使用。这提供一种选择,可将连接代码精确地嵌入到main() 函数中。无论如何,对在应用程序过程中套用老调的任何代码都是一个好主意。将它放在可以通过多个程序访问的函数中,而不是在每个程序中都编写一遍。如果修正这个函数中的一个错误或对这个函数作了一些改进,则可只更改一次,只要重新编译就可以使用这个函数的所有程序都被修正或利用这种改进。同样,编写一些客户机程序,以便在它们执行过程中可以若干次地连接和断开。如果将安装和卸载方法放在连接和断开的函数中,则编写这样一个客户机更加容易。封装策略如下所示:
    1) 将公用代码分离到一个独立的源文件( common.c)的包装函数中。
    2) 提供一个头文件,common.h,其中包括该公共例程的原型。
    3) 在使用公共例程的客户机源文件中包括common.h。
    4) 将公共源文件编译成目标文件。
    5) 将公共目标文件连接到您的客户机程序中。
    用这些策略,让我们构造do_connect() 和do _ disconnect( )。
    do_connect() 代替对mysql_init() 和mysql_real_connect() 的调用,并替换错误打印的代码。除了不传递任何连接处理程序外,您可以像mysql_real_connect() 一样调用它。do_connect() 分配并初始化这个处理程序,然后,在连接后返回一个指向它的指针。如果do_ connect() 失败,则在打印一个错误消息以后,返回N U L L(那就是说,调用do_connect() 并获取返回值N U L L的任何程序都可以简单地退出,而不用担心打印消息的本身)。do_ disconnect () 产生一个指向连接处理程序的指针,并调用mysql_close ()。这里是common.c 的代码:


    common.h 声明common.c 中这些例程的原型:

    要想访问公共例程,应在源文件中包括common.h。请注意, common.c 同样包括common.h。那就是说,如果common.c 中的函数定义与头文件中的声明不匹配,则立即得到一个编译程序警告。同样,如果更改common.c 中的调用次序而没有相应地更改common.h,则当重新编译common.c 时,编译程序将发出警告。
    有人会问为什么要发明包装函数do _ disconnect( ),而它使用得还这么少。do _ disconnect( )和mysql_close() 等价。但是假设在断开连接时,都有一些要执行的额外清除。则通过调用已经完全控制的包装函数,可以修改该包装函数来做需要的事情,对于所做的任何断开的操作,这种更改统一生效。如果直接调用mysql _ close( ),则不能做到这点。在前面,笔者声称对在多个程序中或在单个程序内部多处使用的函数中,将代码封装成模块化代码是有好处的。前面介绍一个理由,还有一些理由参见下面的两个样例。
    ■ 样例1 在MySQL3 .22以前的版本中,mysql_real_connect() 调用与它现在稍微有些不同:即没有数据库名称参数。如果想利用旧的MySQL 客户机库使用do _ connect( ),则它不能工作。然而,可以修改do _ connect( ),使它可在3.22版以前的版本上运行。这就
意味着,通过修改do _ connect( ),可以增加使用它的所有程序的可移植性。如果将这些连接代码直接嵌入到每个客户机中,则必须独立地修改它们中的每一个。
    要想修正do _ connect( ),使它可以处理mysql_real_connect() 的旧格式,那么就可以使用包括当前MySQL 版本MySQL_VERSION_ID 宏。更改了的do_connect() 测试MySQL_VERSION_ID 值,并使用mysql_real_connect() 的正确格式:



    除了下述两点以外, do_connect() 的这个修改过的版本和前一个版本在外观上是完全一样的:
    ■ 它不将db_name 参数传递给mysql_real_connect() 较早的格式,因为那个版本没有这样的参数。
    ■ 如果数据库名称是非NULL 的,则do_connect() 调用mysql_select_db() 使指定的数据库为当前数据库(这类似于没有db_name 参数的效果)。如果没有选择这个数据库,则do_connect() 打印一个错误消息,关闭连接,并返回NULL 来表示失败。
    ■ 样例2 该样例是在对第一个样例的do_connect() 做更改的基础上建立的。那些更改导致对错误函数mysql_errno() 和mysql_error() 的三组调用。每次都将报告问题的这些代码书写出来是非常讨厌的。除此之外,错误所打印出的代码看起来不舒服,读起
来也困难。而读下面这样的代码就比较容易:
    print_error (conn, “mysql_real_connect() failed”) ;所以,让我们在print_error() 函数中封装错误打印。即使conn 为N U L L,也可以编写它来做一些明智的事情。也就是说,如果mysql_init() 调用失败,可以使用print _error( )。而且没有混合调用(一些为fprintf ( ),一些为print _ error( ))。我听到一些反对意见:“为了想报告一个错误而又不必每次都调用两个错误函数,所以使代码故意编写得难以阅读,以说明封装样例更好。其实不用真的写出所有的错误打印代码:只将它编写一次,然后当再次需要时就使用拷贝和粘贴即可。”这种观点是正确的,但我持反对意见,理由如下:
    ■ 即使使用拷贝和粘贴,用较短的代码段进行起来也更容易。
    ■ 每当报告错误时,无论是否愿意每次调用两种函数,将所有的错误报告代码书写得很长,会产生不一致性。将错误报告的代码放在容易调用的包装函数中,就可以减少这种想法并提高编码的一致性。
    ■ 如果决定修改错误消息的格式,则只需要在一个地方而不是整个程序中做更改,这样就要容易许多。或者,如果决定将错误消息编写到日志文件中而不是(或除此以外还)编写到stderr 中,则只须更改print _ error ( ),这就更容易。这种方法可能犯更少的错误,而且再一次减少了工作量和不一致的可能性。
    ■ 当测试程序时,如果使用调试程序,将断点放在错误报告的函数中,则当它侦测出一个错误条件时,调试程序是使程序中断的一种便利方法。以下是错误报告函数print _ error( )的使用举例:


    主源文件client3.c 与client2.c 一样,但是所有嵌入的连接和断开代码都利用调用包装函数来删除和替换了。如下所示:




 

 

 

上下文章:

 

上一篇文章: MySQL数据库技术(31) 下一篇文章: MySQL数据库技术(34)

相关文章:

  • Oracle下调数据库许可价格以适应多芯CPU
  • Oracle发布免费数据库管理工具Raptor
  • 甲骨文意外泄漏数据库安全漏洞
  • Oracle认证数据库备份技巧
  • 甲骨文发布数据库新工具·启动内容管理战略

相关软件:

  • 子墨数据库同步工具 V1.0.0.0
  • Apache+Php+Mysql V1.3 绿色自动安装版
  • 腾讯QQ IP数据库 V0605 纯真版
  • 腾讯QQ IP数据库 V0420 纯真版(繁体版)
  • 火柴峰动画(1760数据库)
  • 天翼音乐美化版(三万音乐、图片数据库)

 

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

数据库类分类导航

  • SQL Server
  • MySQL Server
  • DB2
  • Oracle
  • ACCESS
  • Foxpro
  • PowerBuilder
  • Sybase

本类经典文章推荐

  • 怎样在vc、delphi中使用mysql(mys...
  • MySQL数据导入与导出之二
  • 如何实现MySQL中的用户管理?
  • win 2000 安装 mysql-shareware-3...
  • Mysql字段长度
  • 如何把ACCESS的数据导入到Mysql中
  • 如何为用户设置密码(MYSQL)
  • 如何恢复MYSQL的ROOT口令
  • MySQL数据库备份
  • MYSQL初学者使用指南 上篇

MySQL Server阅读排行

  • MySQL中的SQL-- TEXT、DATE、和SE...
  • MYSQL初学者使用指南 上篇
  • 怎样在vc、delphi中使用mysql(mys...
  • MySQL数据导入与导出之二
  • MYSQL初学者使用指南 下篇
  • 如何把ACCESS的数据导入到Mysql中
  • 如何为用户设置密码(MYSQL)
  • Mysql字段长度
  • MySQL数据库技术(01)
  • MySQL数据库技术(19)

数据库类阅读总排行

  • MySQL中的SQL-- TEXT、DATE、和SE...
  • MYSQL初学者使用指南 上篇
  • 怎样在vc、delphi中使用mysql(mys...
  • MySQL数据导入与导出之二
  • SQL Server数据库技术(96)
  • MYSQL初学者使用指南 下篇
  • SQL Server数据库技术(98)
  • SQL Server数据库技术(60)
  • 精通数据库系列之入门-基础篇
  • 如何把ACCESS的数据导入到Mysql中

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有