在OracleJDBC访问中加入Spring特性(3)
文章作者 100test 发表时间 2007:03:14 13:57:50
来源 100Test.Com百考试题网
本文末尾的在线资源部分包含了到一个网站的链接,该网站详细介绍了用户可能遇到的各种 Oracle 数据库异常。Oracle JDBC 驱动程序错误码可以在 Oracle JDBC 开发人员指南和参考的附录 B 中找到,几种常见的 Oracle 数据库产生的错误码可以在 Oracle 数据库错误消息文档中找到(没有列出产品特有的 ORA 消息)。
Spring 框架既支持基于标准的 SQLState 又支持供应商特有的错误码。与自主开发的数据访问软件相比,该框架对供应商特有的错误码的支持利用了与特有数据库的更松散的耦合来实现。Spring 框架引入了一个 XML 配置文件,利用它将在 JDBC 代码中经常遇到的某些供应商特有的错误与 Spring 支持的异常类连接起来。Spring 提供的 sql-error-codes.xml 配置文件目前包含了代码清单 4 中所示针对 Oracle 数据库的配置。(在该文件中还涉及其他的数据库供应商,但并包含在此代码清单中。)
代码清单 4
900,903,904,917,936,942,17006
17003
17002
1,1400,1722,2291
54 |
sql-error-codes.xml 中的 value 元素的主体中的整数由逗号分隔,它们对应于前面所述的供应商特有的错误码的数字部分。在表 1 中列出了 "badSqlGrammarCodes" 类别中的许多数字码。17006 代码是一个 JDBC 驱动程序错误码,它指示“无效的列名”。代码清单 4 中的 property 元素标记的 name 属性指示 Spring 框架使用哪种类型的异常来处理那些特定的错误码。例如,917 (ORA-00917) 错误将导致 Spring 框架抛出一个非强制的 BadSqlGrammarException。因为该配置文件是 XML 格式的并且在代码的外部,因此可以很容易地将其他代码添加到该文件中,用于抛出最适合于特定供应商错误码的基于 Spring 的 JDBC 异常。
出于各种原因,您可能希望抛出与数据库的错误码对应的特定异常。例如,您可能希望选择处理 SQLException 正常抛出的情况,而不是处理所有的情况。因为在许多情况下,在运行时您无法对代码作任何处理。通过为数据库开发人员创建一个更细粒化的异常层次结构,以及通过提供特定数据库错误和特定异常之间的一个松散耦合的连接,Spring 框架使您能够更轻松地处理那些容易处理的异常,而选择忽略不能合理处理的非强制异常。
Spring 为 JDBC 支持提供的特别方便的异常类之一是 BadSqlGrammarException。该异常类提供了一个名称为 getSql() 的方法,该方法将返回在抛出异常时正被调用的 SQL 语句。因为该类可以识别 SQL 的特征(它不是一个通用的 DAO 类),因此它还通过 getSQLException() 方法提供了标准 SQLException 的一个句柄。
除了将其他的 Oracle 特有的错误码添加到 sql-error-codes.xml 文件中以将它们映射至现有的由 Spring 提供的异常类之外,您还可以创建定制的异常处理类。然后可以编写一个定制的 SQLExceptionTranslator 类来将 Oracle 错误码与这些定制的异常处理类连接起来。