基于标注的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标注从贷款数据库中获取所有活跃贷款的例子:
|
Sql标注同样允许I/O参数(参数标记以一个问号后跟一个整型数据表示)。这里是一个参数化sql查询的例子:
|
Update标注
Update标注用于修饰Query接口方法以更新数据库表中的一条或多条记录。Update标注必须包含一个sql标注类型元素。这里是一个Update标注的例子:
|
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 |
0A |
|
SQLTransactionRollbackException |
08 |
| SQLTimeoutException | None |
| 共4页: 上一页 [1] 2 [3] [4] 下一页 | ||
|