分享
 
 
 

探讨JDBC 4.0在设计和性能方面的改进

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

摘要 JDBC(Java数据库连接)4.0预计在2006年中期作为Java 6.0标准版的一部分正式发行。现在,我们大家都关心的问题是,如何利用这一新的规范来改进Java应用程序数据存取和交互方面的设计与性能。本文将与你一起探讨JDBC 4.0中引入的新特征,讨论它对一些现有问题的解决方案,并且通过具体示例展示它在设计和性能方面的改进。

自从核心Java语言的第一个公开发行版本起,JDBC(Java数据库连接)已经经历了十年的发展历程。它的当前版本4.0(将与Java标准版本6.0一起打包发行)提供了一组更为丰富的API,主要目的在于改进软件开发的设计和性能。

本文将重点讨论JDBC 4.0规范在设计和性能方面的改进。

一、 注释和泛型DataSet

在本文中,我假定你已经了解注释和泛型。其实,这两个概念是随着J2SE 5.0的发行一同引入的;与此同时,JDBC 4.0中引入了注释和泛型DataSet。这一变化的主要目的是为了简化SQL查询和SQL DML(数据操纵语言)语句的执行。

新一代API定义了一组Query和DataSet接口。这个Query接口定义了一组带有JDBC注释的方法。这些带有注释的方法描述了SQL select和update语句,并且指定应该如何把结果绑定到一个DataSet上。这个DataSet接口是一个通过泛型定义实现的参数化类型,也为结果集数据提供一种类型安全的定义。

所有的Query接口都继续自BaseQuery接口。你可以使用Connection.createQueryObject()或DataSource.createQueryObject()方法(这两个方法都使用一个Query接口类型作为它的参数)来具体实现这样的接口。

一个DataSet接口继续自java.util.List;该接口使用一个描述结果集数据列的数据库(该数据库是通过Query接口的一个注释的方法返回的)作为它的参数类型。在连接方式和非连接方式下都可以操作和使用DataSet。因此,根据使用的是连接方式还是非连接方式,这个DataSet也分别相应地实现为一个ResultSet或CachedRowSet。DataSet,作为java.util.List的一个子接口,答应使用Iterator模式通过java.util.Iterator接口存取其数据行。

你可以用两种方式来指定数据类或用户定义类(作为DataSet接口的一个参数类型)-作为一个结构或作为一个JavaBeans对象。无论哪一种方式都能够把结果集数据列绑定到用户定义的类定义上;但是,JavaBeans组件模型更漂亮些,并且更利于对象定义在另外的支持JavaBeans模型的框架中的重用。

列表1摘自本文示例中的代码片断,它展示了如何使用这种新型的API来创建和运行SQL查询:使用一个用户定义类定义结果集数据,并且把返回的结果集绑定到用户定义的描述中。

列表1.Employee用户定义类型与employeeQueries接口

pubic class Employee {

private int employeeId;

private String firstName;

private String lastName;

public int getEmployeeId() {

return employeeId;

}

public setEmployeeId(int employeeId) {

this.employeeId = employeeId;

}

public String getFirstName() {

return firstName;

}

public setFirstName(String firstName) {

this.firstName = firstName;

}

public String getLastName() {

return lastName;

}

public setLastName(String lastName) {

this.lastName = lastName;

}

}

interface EmployeeQueries extends BaseQuery {

@Select (sql="SELECT employeeId, firstName, lastName FROM employee")

DataSet<Employee> getAllEmployees ();

@Update (sql="delete from employee")

int deleteAllEmployees ();

}

Connection con = ...

EmployeeQueries empQueries = con.createQueryObject (EmployeeQueries.class);

DataSet<Employee> empData = empQueries.getAllEmployees ();

二、 改进异常处理能力

在JDBC API 4.0以前的版本中,异常处理功能极其有限。对于所有类型的错误都会笼统地抛出一个SQLException异常-根本不存在异常的具体分类,且没有相应的层次定义。所以这时,你唯一能够得到一些有意义的信息的办法是检索和分析SQLState值。另一方面,SQLState值及其相应的含义会因不同的数据源而有所改变;因此,要想追踪到问题的"根部"并且有效地处理异常是一件非常乏味的任务。

JDBC 4.0改进了异常处理能力,同时也缓解了一些前面提到的问题。其中的要害改进有:

· 把SQLException分成短暂异常和非短暂异常两种类型

· 支持链式异常

· 实现Iterable接口

当一个以前失败的操作检索成功时,将会抛出SQLTransientException异常;而在检索不成功时将会抛出SQLNonTransientException异常-除非导致SQLException的原因得到纠正。

图1展示了子类SQLTransientException和SQLNonTransientException。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有