JDBC 4.0的增强特性(2)

本文介绍JDBC4.0中基于标注的SQL查询方法,包括Select和Update标注的应用,并详细解释了如何利用这些标注简化SQL查询与Java类之间的交互。此外,还探讨了JDBC4.0在SQLException处理方面的增强特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于标注的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, scrollableBooleanFlags 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
SQLDataException22
SQLIntegrityConstraintViolationException
23
SQLInvalidAuthorizationException28
SQLSyntaxErrorException
42

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

Exception class
SQLState value
SQLTransientConnectionException
0A
SQLTransactionRollbackException
08
SQLTimeoutException None
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值