科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java SE 6中JDBC 4.0的增强特性(2)

Java SE 6中JDBC 4.0的增强特性(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java SE 6包含了对Java数据库互连(JDBC)API的一些增强特性。这些增强特性的版本将定为JDBC version 4.0。JDBC新特性的目的是提供更简单的设计和更好的开发体验。

来源:IT专家网【原创】 2008年5月6日

关键字: 特性 JDBC 4.0 Java SE 6 java

  • 评论
  • 分享微博
  • 分享邮件
Select标注

  Select标注用于在Java类中指明一个选择查询,使get方法能从数据库表中取回数据。表2显示的是Select标注的不同属性及其作用:

 变量  类型  描述
 sql  String  SQL Select query string.
 value  String  Same as sql attribute.
 tableName  String  Name of the database table against which the sql will be invoked.
 readOnly, connected, scrollable  Boolean  Flags used to indicate if the returned DataSet is read-only or updateable, is connected to the back-end database, and is scrollable when used in connected mode respectively.
 allColumnsMapped  Boolean  Flag to indicate if the column names in the sql annotation element are mapped 1-to-1 with the fields in the DataSet.

   这里有一个应用Select标注从贷款数据库中获取所有活跃贷款的例子:

interface LoanAppDetailsQuery extends BaseQuery {
        @Select("SELECT * FROM LoanDetais where LoanStatus = 'A'")
        DataSet<LoanApplication> getAllActiveLoans();
}

  Sql标注同样允许I/O参数(参数标记以一个问号后跟一个整型数据表示)。这里是一个参数化sql查询的例子:

interface LoanAppDetailsQuery extends BaseQuery {
        @Select(sql="SELECT * from LoanDetails
                where borrowerFirstName= ?1 and borrowerLastName= ?2")
        DataSet<LoanApplication> getLoanDetailsByBorrowerName(String borrFirstName,
                String borrLastName);
}

Update标注

  Update标注用于修饰Query接口方法以更新数据库表中的一条或多条记录。Update标注必须包含一个sql标注类型元素。这里是一个Update标注的例子:

interface LoanAppDetailsQuery extends BaseQuery {
        @Update(sql="update LoanDetails set LoanStatus = ?1
                where loanId = ?2")
        boolean updateLoanStatus(String loanStatus, int loanId);
}

  SQL异常处理的增强特性

  异常处理是Java编程的一个重要部分,特别是对后台关系数据库进行连接或查询时。SQLException是我们用以指出与数据库相关错误的类。JDBC 4.0在SQLException处理中有不少增强。为了在处理SQLException时获得更好的开发体验,JDBC 4.0版作了如下增强:

  •   1. 新的SQLException子类
  •   2. 对因果关系的支持
  •   3. 对改进的for-each循环的支持

  新的SQLException类

  SQLException的新子类提供了一种方法,使Java开发人员能写出更方便改动的错误处理代码。JDBC 4.0介绍了两个新的SQLException型别:

  •   • SQL non-transient exception
  •   • SQL transient exception
    Non-Transient Exception:除非修正引发SQLException异常的代码,否则该异常在再次尝试相同JDBC操作失败后被抛出。表3显示了JDBC 4.0新增的SQLNonTransientException异常子类(SQL 2003规范中定义了SQLState类的值):

     Exception class SQLState  value
     SQLFeatureNotSupportedException  0A
     SQLNonTransientConnectionException  08
     SQLDataException  22
     SQLIntegrityConstraintViolationException  23
     SQLInvalidAuthorizationException  28
     SQLSyntaxErrorException  42

       Transient Exception:当先前执行失败的JDBC操作在没有任何应用级功能干涉的情况下可能成功执行时,该异常被抛出。继承自SQLTransientException的新异常如表4所列:

     Exception class SQLState  value
     SQLTransientConnectionException  08
     SQLTransactionRollbackException  40
     SQLTimeoutException  None

      因果关系

      SQLException类现在支持Java SE链式异常机制(又称因果工具),它使我们能在一个JDBC操作中处理多条SQLException异常(如果后台数据库支持多条异常特性)。这种情形发生在执行一条可能会抛出多条SQLException异常的语句时。

      我们可以调用SQLException中的getNextException()方法在异常链中进行迭代。这里是一些处理getNextException()因果关系的范例代码:

    catch(SQLException ex) {
         while(ex != null) {
            LOG.error("SQL State:" + ex.getSQLState());
            LOG.error("Error Code:" + ex.getErrorCode());
            LOG.error("Message:" + ex.getMessage());
            Throwable t = ex.getCause();
            while(t != null) {
                LOG.error("Cause:" + t);
                t = t.getCause();
            }
            ex = ex.getNextException();
        }
    }

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章