BlogJava 联系 聚合 管理  

Blog Stats

News

近期活动:

随笔分类

随笔档案

朋友的BLOG

社区


无言独上西楼,月如钩,寂寞梧桐深夜锁清秋

  五一节(2005年啦),新本本分到手了,于是咱就动手装系统了。OS换成了Windows2003,然后稀里花啦装 了一堆软件。装完之后,配置一个缺陷管理软件,载入原有数据,然后就发现连接不上了。系统抛出一个第三方数据库连接器封装后的异常,说是无法装载驱动程序。检 查ODBC、检查PATH,一切OK。把所有可能的目录全改为EVERYONE完全控制, 还是无法装载驱动程序。OK,咱想不会是MDAC的问题吧,查看MDAC版本,啊呀,居然是2.8。记忆中好象2.8与老的ODBC驱动有点不兼容, DOWNGRADE也不成。唉,算了,咱重装系统吧,在2000P上咱家装这个软件有很多次了,都没有问题。反正是新本本,51也有时间。于是重装OS, DOWNGRADE为2000P,这一次咱就狡滑了一点点,先装这个有问题的软件。装完之后,一试,还是无法装载驱动程序。这 下可晕菜了。一咬牙,重装系统,上2000Server。这样连不上ORACLE,咱还可以移植到SQL Server。这一次装完ORACLE之后,先 装了一个数据库访问工具软件,通过ODBC能访问数据库。太太地安心了,呵呵。于是装Oracle Manager。装完发现用ODBC连不上库了!系统抛出的异常是ORACLE自身的无此服务名。啊阿,原来是这样地说。

  原来咱被第三方的连接器骗了!它捕获了ORALE自身抛出的异常后,统一抛出了无法装载驱动程序的异常,这样真实的原因就消失了。作为异常,它本身就应该准确地指出出现问题的地方的原因。不正确的封装和处理,导致了毫无意义的异常。

  想开了去,很多软件都存在这样的问题,比如下面的代码:

public   void  checkAll()  throws  CheckException{

  
for  ( int  i = 0 ;i < items.length;i ++ ){

    checkItem(items[i]);

  }

}

public   void  checkItem(Item item)  throws  CheckException{

  
if  (check not passed)

    
throw   new  CheckException( " Check not passed " );

}

  上面的代码中,抛出的异常正确地指明了异常类型,即检查未通过,但存在的问题是:哪一项的检查未通过?如果ITEMS有数百项,运行过程中出了问题,又有誰知道是哪一项的数据有问题?如果checkItem改一改就很好了,如:

public   void  checkItem(Item item)  throws  CheckException{

  
if  (check not passed)

    
throw   new  CheckException( " Check not passed, item is : "   +  item.getName());

}

posted on 2006-04-12 15:27 无言独上西楼 阅读(321) 评论(0)  编辑  收藏 所属分类: 巴山夜语

只有注册用户登录后才能发表评论。


网站导航: