科技行者

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

知识库

知识库 安全导航

至顶网软件频道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年6月4日

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

  • 评论
  • 分享微博
  • 分享邮件
RowId支持

  JDBC 4.0增加了RowID接口以支持ROWID数据类型,Oracle和DB2数据库支持该数据类型。在你需要把大量缺少唯一标识符字段的查询记录放入一个不允许重复对象的Collection容器(如Hashtable)的情况下,RowId很有用。我们可以用ResultSet的getRowId()方法获取RowId,用PreparedStatement的setRowId()方法在查询中使用RowId。

  关于RowId对象需要记住的一件重要事项是,RowId值在数据源之间不可移植。当在PreparedStatement和ResultSet中单独使用set或update方法时,需要想到指明数据源。因此,RowId对象不应被不同的Connection和ResultSet对象共享。

  DatabaseMetaData中的getRowIdLifetime()方法可被用来确定RowId对象的有效存活时间。该方法的可能返回值如表1所列:

 RowId值  描述
 ROWID_UNSUPPORTED  Doesn't support ROWID data type.
 ROWID_VALID_OTHER  Lifetime of the RowID is dependent on database vendor implementation.
 ROWID_VALID_TRANSACTION  Lifetime of the RowID is within the current transaction as long as the row in the database table is not deleted.
 ROWID_VALID_SESSION  Lifetime of the RowID is the duration of the current session as long as the row in the database table is not deleted.
 ROWID_VALID_FOREVER  Lifetime of the RowID is unlimited as long as the row in the database table is not deleted.

  基于标注的SQL查询

  JDBC 4.0对标注(Java SE 5新增)作了进一步规范和补充,他允许开发人员不必再写大量代码就能达到联系SQL查询和Java类的目的。并且,通过使用Generics(JSR 014)和元数据(JSR 175) API,我们只要指明查询的输入和输出参数就能将SQL查询与Java对象进行关联。我们还可以将查询结果捆绑在Java类上以加快查询输出的处理。将查询对象置于Java对象之中,我们可以不必像往常一样写所有代码。在Java代码中指明SQL查询,经常用到两种标注:

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);
}

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

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

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