注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 数据库 > Oracle 内容正文:探讨JDBC 4.0在设计和性能方面的改进

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

发布时间:2006-08-24 11:26:51 来源:天极开发 网友评论 0 条
  摘要 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。


图1.SQL异常类型:短暂型和非短暂型

  另一方面,在新的API中,加入了对链式异常的支持。新的异常基类构造器中添加了额外参数以捕获异常的可能原因。例如,在一个循环中可能存在SQLException遍历;这时,开发人员可以调用getCause()来决定异常的可能原因。如果获取的结果的确是产生这些异常的原因,那么getCause()方法能够返回一个非SQLException。

  现在,SQLException类实现了Iterable接口并且支持J2SE 5.0的for each循环。

  列表2描述了新的for-each-loop结构的用法:

  列表2.For each循环结构

catch(SQLException ex) {
 for(Throwable t : ex) {
  System.out.println("exception:" + t);
 }
}

 1/2    1 2 ›› ›|
相关文章
    无相关信息
【评论】【收藏本文】【打印】【关闭】
上一篇文章:解读Wrox的历史、现在与未来
下一篇文章:三大编程语言性能PK:Java, C/C++和Ruby
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
Atlas快速入门之实战Atlas
Atlas快速入门之实战Atlas
.net页面间的参数传递简单实例
.net页面间的参数传递简单实例
推荐阅讯
  • AJAX中JavaScript类的三种成员
  • 深入WebLogic Portal UI编程
  • RPG游戏设计快速入门之初始篇
  • Eclipse 的历史、现状和未来
  • AJAX入门之使用for实现反射机制
  • Oracle SQL性能优化系列讲座之一
  • OpenGL编程轻松入门之菜单管理
  • 什么是Web 2.0?
  • 基于AJAX技术提高搜索引擎排名
  • 实例讲解Perl的Ajax实现与中文问题
阅读排行
  • 1..net页面间的参数传递简单实例
  • 2.VC++与Matlab混合编程之引擎操作详解
  • 3.Oracle数据库数据对象分析
  • 4.Eclipse3.2+Tomcat5.5.17+Oracle9配置
  • 5.Oracle数据库中索引的维护
  • 6.在Oracle的网络结构中解决连接问题
  • 7.Oracle数据安全面面观
  • 8.Oracle数据库的ORA-00257故障解决过程
  • 9.Oracle数据库备份与恢复的三种方法
  • 10.Oracle与SQL Server在企业应用中的比较
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载