在OracleJDBC访问中加入Spring特性(4)
文章作者 100test 发表时间 2007:03:14 13:57:43
来源 100Test.Com百考试题网
使用 Oracle 特有的 SQL 语句
Spring 框架的一个有用的特点是它仅专注于“包装”JDBC 开发的最常用和最麻烦的方面,而不会过度阻止在需要的时候使用专有的 SQL/JDBC。虽然我们都希望使我们的代码完全标准化(如果这样做对我们无任何影响或有些一定影响),但有很多时候使用特殊的供应商特有的特性将是谨慎甚至必须的做法。
在 Oracle 范畴中的一个示例就是使用 Oracle 的 ROWID 来唯一描述 Oracle 表中的行。代码清单 7 和 8 显示了传统的基于 JDBC 和 Spring 的 JDBC 代码,它们分别根据提供的员工号从 scott/tiger EMP 表中检索 ROWID。在两种情况下都提供了一个作为字符串返回的 ROWID。
代码清单 7
String queryStr = "SELECT rowid FROM emp
WHERE empno = " aEmpNum.
// aEmpNum set previouslyString rowId = null.
try{stmt = this.myConnection.createStatement().
rs = stmt.executeQuery(queryStr).while ( rs.next() )
{rowId = rs.getString("ROWID"). }}
// lots of catch-finally code needed after this |
代码清单 8
String queryStr = "SELECT rowid FROM emp
WHERE empno = " aEmpNum.String rowId = null.
try{JdbcTemplate jt = new JdbcTemplate(this.myDataSource).
oracle.sql.ROWID oraRowId =(ROWID) jt.queryForObject(queryStr, ROWID.class).
rowId = oraRowId.stringValue().}
catch ( IncorrectResultSizeDataAccessException wrongSizeEx )
{// This unchecked exception is thrown in this case if more
// than one result is returned from the query.
// Explicitly printing out the results of this exception s
// methods getExpectedSize() and getActualSize() is really not
// necessary in this case because this exception s getMessage()
// returns this same information in sentence form. System.err.println( wrongSizeEx.getMessage() ).
System.err.print
( "Expected " wrongSizeEx.getExpectedSize() " results,
but actually got back " wrongSizeEx.getActualSize() " results.").} |
除了显示 Spring 框架支持 Oracle 特有的关键字的灵活性之外,代码清单 8 还显示了 Spring 的 DAO 异常之一的用途。在代码清单 8 中,如果不小心编辑了 queryStr 来返回所有的 ROWID,那么将抛出 IncorrectResultSizeDataAccessException。
专有 Oracle SQL 的最为大家所熟悉的例子可能是无处不在的查询 SELECT sysdate FROM dual。代码清单 9 显示了这个 Oracle 特有的查询(不是 ANSI 标准的一部分)如何与 Spring 框架一起使用。
代码清单 9
String queryStr = "SELECT sysdate FROM dual".
Date date = null.
try{JdbcTemplate jt = new JdbcTemplate(this.myDataSource).
date = (Date) jt.queryForObject(queryStr, Date.class).}
catch ( BadSqlGrammarException badSqlEx )
// unchecked{System.err.println( badSqlEx.getMessage() ).
System.err.println( "Bad SQL:" badSqlEx.getSql() ).} |