My SQL数据库实用技术(32)
时间:2007-12-23 来源:不详 作者:迈克DB
除了下述两点以外, 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 一样,但是所有嵌入的连接和断开代码都利用调用包装函数来删除和替换了。如下所示:
织梦好,好织梦
织梦内容管理系统
上一篇:My SQL数据库实用技术(31) 下一篇:My SQL数据库实用技术(33)
文章评论
共有位Admini5网友发表了评论 查看完整内容