Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104668730
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-22 17:39:39

 来源:

清单 13 中显示的其他 DBI 异常包括那些派生自 DBI::DatabaseError 的异常,以及用于捕获与 DBI 接口而非数据库有关的异常的 DBI::InterfaceError 异常。

清单 13 中的代码将导致抛出一个异常,因为存在一个“while 0”循环(Ruby 中 0 的值为“true”),该循环将重复执行,直至抛出异常。由于在抛出 DBI::DatabaseError 之前重复调用 DBI.connect 而没有正确关闭打开的连接,因此的确会抛出该异常。在这种情况下,显示的错误代码为 12520(特定于 Oracle 的数据库错误代码),错误字符串为“ORA-12520:TNS:listener could not find available handler for requested type of server.”这些输出代码和字符串值是使用适当的 DBI::DatabaseError 属性(err 和 errstr)输出的。

如果用一个数据库操作(如 SELECT 语句)替换清单 13 中的 while 循环(故意强制数据库错误),rescue、else 和 ensure 块将和清单 12 中的对应块一样被激活。如果仍出现任何异常(如完整性约束),将调用适当的“rescue”块。如果没有遇到指定了 rescue 块的异常,“else”块中的代码将执行并提交事务。在任何情况下,无论是否抛出异常,都将执行“ensure”代码块,并相应地断开与处理程序的连接。

编写 Ruby 脚本时,不一定需要捕获 (rescue) 异常(考虑 Java 的非强制异常)。清单 12 之前的所有未进行异常处理的代码清单都对此进行了阐释。然而,如果您知道可能出现某些异常并希望您的脚本针对这些情况进行某些处理(如立即退出或者打印出某些与异常相关的详细信息),Ruby 可以简化异常处理。如果您不想将 rescue-else-ensure 块与抛出异常的代码块相关联,该脚本将突然停止该代码块的执行,将显示常规异常信息,执行下一个代码块。

图 12 显示了 Ruby 的一些主要异常。图 13 显示了 Ruby DBI 异常。除了这些标准异常之外,您始终可以创建和使用自己的 Ruby 异常。

图12:所选的 Ruby 异常
图13:Ruby/DBI 异常

由于 Ruby(与 Java 一样)是一种面向对象的语言,因此我能够用 Oracle JDeveloper 10g 的 UML 建模工具创建创建图 12 和 13 中的类图。由于 DatabaseError 属性用在代码清单中,因此在图 13 中专门调用这些属性。

Ruby 与对象关系映射

在本文中,您学习了如何协同使用 Ruby 和 Ruby/DBI 来执行数据库操作。对于我们需要直接进行的大多数数据库脚本编写,这通常是一个合理的方法,但如果您需要通过 Ruby 和 Oracle 数据库使用一个对象关系映射方法,ActiveRecord 可能是您所需要的。

ActiveRecord 是在 Ruby on Rails 中引入的,但现在可在 Rails 之外使用。ActiveRecord 依赖于许多惯例和假设,只有遵守这些惯例,ORM 体验才会相对简单。大多数 ActiveRecord 惯例可以清楚地解释 Ruby 模型类和 Oracle 数据库表及其列的适当命名。ActiveRecord 还提供了简单的覆盖机制,可以在需要的情况下脱离惯例和假设。

ActiveRecord 提供了一个有关 Ruby 的面向对象的功能的值得关注的示例,特别是其对于继承和混合的支持。由于所有模型都继承的基本 ActiveRecord 类可以使用重要的功能,因此使用 ActiveRecord 的开发人员通常很少需要向其 ActiveRecord 模型类添加代码。

Ruby 与 Web 开发

由于近来使用 Ruby of Rails 的人数不断增加,因此很难相信还有其他适用于 Ruby 的 Web 框架。事实上,有多个 Web 框架可用于此用途,但 Rails 肯定是该领域的主导者。实际上,Ruby on Rails 不仅为 Ruby 带来了新的声望,还通过其他语言的(如 Python 和 Java)类似框架进行模仿。如果您打算使用 Ruby 进行 Web 开发,需要使用 Ruby on Rails。

Ruby 不仅仅是脚本编写语言

本文主要介绍 Ruby 与数据库访问以及与数据库相关文件操作有关的脚本编写能力。然而,Ruby 提供的远不止这些功能。凭借其自身的精致性、简洁性、丰富的库以及对面向对象的特性的强力支持,Ruby 成为编写成熟应用程序以及脚本的出色语言。

无论是否使用 Rails,Ruby 都是一种值得学习和使用的非常有用的语言。尽管可用于开发复杂的面向对象的应用程序和 Web 应用程序,它仍然保留了脚本编写语言的强大功能,因此非常适合与 Oracle 数据库和其他 Oracle 工具有关的脚本编写。

阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~