在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 exceptions

// methods getExpectedSize() and getActualSize() is really not

// necessary in this case because this exceptions 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() ).}


相关文章


你的INTERNAL帐号密码忘记了怎么办
在OracleJDBC访问中加入Spring特性(5)
Oraclesqlplus语句编辑命令
oracle基本概念的学习笔记
在OracleJDBC访问中加入Spring特性(4)
ORACLEPL_SQL基础--游标的学习
在OracleJDBC访问中加入Spring特性(2)
Oracle数据库中的“锁”学习小结
在OracleJDBC访问中加入Spring特性(3)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛