网站主页   操作系统    网络工程    服务器    网页制作    数据库    程序开发    网络安全    办公软件   
  栏目导航
讲座日期: 本周六下午1点30分 抢座
讲座地点: 北大青鸟马甸校区
主讲老师: 王老师 金牌讲师
讲座主题: 网络安全
讲座内容: 检测、防御、黑客信息,如何过滤不安全的网站,如何防御黑客的进攻。
订座电话: 010-82011432/33
  您当前位置:主页 > 网络学院 > 数据库 > MYSQL >

MySQL数据库技术(32)




  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( ),可以增加使用它的所有程序的可移植性。如果将这些连接代码直接嵌入到每个客户机中,则必须独立地修改它们中的每一个。

   


Copyright © 2002-2015 版权所有
学校地址:北京市海淀区西三旗建材城中路29号北大青鸟
招生热线:010-82011433/32 京公网安备110102004704  京ICP备05043413号 京公网安备110102004704