JDBC 2.0 API被划分为两部分:JDBC 2.0核心API和 JDBC 2.0标准扩展API。核心API在java.sql里面。这是原来的版本就实现了的基本的功能。标准扩展API在javax.sql里面。由 JDBC2.0规范新规定的一些接口在这里面。当然,JDBC2.0也对原来版本的java.sql核心做了一些改动。不过不是很大。原来JDBC1.0 的程序可以不加修改的在JDBC2.0上运行。这是Java的一贯的良好的作风。最新的JDBC包可以从sun公司的网站上下载。
JDBC2.0的扩展API增加了一些数据访问和数据源访问的重大的功能。这中间有一些是主要用来做企业计算的。用JDBC2.0的新的扩展包,JDBC提供了一个从JAVA2平台的通用的数据访问的方法。
首先,我们来看看JDBC标准扩展的API怎样来和JDBC2.0结合在一起的。JDBC2.0包括两个包:
1、 java.sql包,个包里面是JDBC2.0的核心API。它包括了原来的JDBC API(JDBC 1.0版本),再加上一些新的2.0版本的API。这个包在Java 2 Platform SDK里面有。
2、 javax.sql包,这里面是JDBC2.0的标准扩展API。这个包是一个全新的,在Java 2 Platform SDK, Enterprise Edition里面单独提供。
JDBC2.0的核心API包括了JDBC1.0的API,并在此基础上增加了一些功能,对某些性能做了增强。使java语言在数据库计算的前端提供了统一的数据访问方法,效率也得到了提高。
JDBC是向后兼容的,JDBC1.0的程序可以不加修改的运行在JDBC2.0上。但是,假如程序中用到了JDBC2.0的新特性,就必须要运行在JDBC2.0版本上。
概括的来说,JDBC核心API的新特性在两个方面做了工作。一个是支持一些新的功能,另一个就是支持SQL3的数据类型。
1、 在支持新功能方面:包括结果集可以向后滚动,批量的更新数据。另外,还提供了UNICODE字符集的字符流操作。
2、 在支持SQL3的数据类型方面:包括新的SQL3数据类型,增加了对持久性对象的存贮。
为了对数据的存取,操作更加方便,JDBC的新特性是应用程序的设计更容易了。例如:数据块的操作能够显著的提高数据库访问的性能。新增加的 BLOB, CLOB,和数组接口能够是应用程序操作大块的数据类型,而不必客户端在存贮之前进行其它的处理。这样,就显著的提高了内存的使用效率。
下面我们来介绍JDBC2.0的标准扩展API。标准扩展API分为如下几个方面:
1、 DataSource接口:和Java名字目录服务(JNDI)一起工作的数据源接口。
2、 Connection pooling(连接池):可以重复使用连接,而不是对每个请求都使用一个新的连接。
3、 Distrubute transaction(分布式的事务):在一个事务中涉及到了多个数据库服务器。
4、 Rowsets:JavaBean组件包含了结果集,主要用来将数据传给瘦客户,或者提供一个可以滚动的结果集。
下面我们一个一个来介绍:
一、DataSource接口是一个更好的连接数据源的方法:
JDBC1.0是原来是用DriverManager类来产生一个对数据源的连接。JDBC2.0用一种替代的方法,使用DataSource的实现,代码变的更小巧精致,也更容易控制。
一个DataSource对象代表了一个真正的数据源。根据DataSource的实现方法,数据源既可以是从关系数据库,也电子表格,还可以是一个表格形式的文件。当一个DataSource对象注册到名字服务中,应用程序就可以通过名字服务获得DataSource对象,并用它来产生一个与 DataSource代表的数据源之间的连接。
关于数据源的信息和如何来定位数据源,例如数据库服务器的名字,在哪台机器上,端口号等等,都包含在DataSource对象的属性里面去了。这样,对应用程序的设计来说是更方便了,因为并不需要硬性的把驱动的名字写死到程序里面去。通常驱动名字中都包含了驱动提供商的名字,而在DriverManager类中通常是这么做的。如果数据源要移植到另一个数据库驱动中,代码也很容易做修改。所需要做的修改只是更改DataSource的相关的属性。而使用DataSource对象的代码不需要做任何改动。
由系统管理员或者有相应权限的人来配置DataSource对象。配置DataSource,包括设定DataSource的属性,然后将它注册到JNDI 名字服务中去。在注册DataSource对象的的过程中,系统管理员需要把DataSource对象和一个逻辑名字关联起来。名字可以是任意的,通常取成能代表数据源并且容易记住的名字。在下面的例子中,名字起为:InventoryDB,按照惯例,逻辑名字通常都在jdbc的子上下文中。这样,逻辑名字的全名就是:jdbc/ InventoryDB。
一旦配置好了数据源对象,应用程序设计者就可以用它来产生一个与数据源的连接。下面的代码片段示例了如何用JNDI上下文获得一个一个数据源对象,然后如何用数据源对象产生一个与数据源的连接。开始的两行用的是JNDI API,第三行用的才是JDBC的API:
Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/InventoryDB");Connection con = ds.getConnection("myPassword", "myUserName");
在一个基本的DataSource实现中,DataSource.getConnection方法返回的Connection对象和用 DriverManager.getConnection方法返回的Connection对象是一样的。因为DataSource提供的方便性,我们推荐使用DataSource对象来得到一个Connection对象。我们希望所以的基于JDBC2.0技术的数据库驱动都包含一个基本的 DataSource的实现,这样就可以在应用程序中很容易的使用它。
对于普通的应用程序设计者,是否使用DataSource对象只是一个选择问题。但是,对于那些需要用的连接池或者分布式的事务的应用程序设计者来说,就必须使用DataSource对象来获得Connection,原因在下面我们会提到。
二、Connection pooling(连接池):
连接池是这么一种机制,当应用程序关闭一个Connection的时候,这个连接被回收,而不是被destroy,因为建立一个连接是一个很费资源的操作。如果能把回收的连接重新利用,会减少新创建连接的数目,显著的提高运行的性能。
假设应用程序需要建立到一个名字为EmpolyeeDB的DataSource的连接。使用连接池得到连接的代码如下:
Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/EmployeeDB"); Connection con = ds.getConnection("myPassword", "myUserName");除了逻辑名字以外,我们发现其代码和上面举的例子的代码是一样的。逻辑名字不同,就可以连接到不同的数据库。DataSource对象的getConnection方法返回的 Connection是否是一个连接池中的连接完全取决于DataSource对象的实现方法。如果DataSource对象实现与一个支持连接池的中间层的服务器一起工作,DataSource对象就会自动的返回连接池中的连接,这个连接也是可以重复利用的。
是否使用连接池获得一个连接,在应用程序的代码上是看不出不同的。在使用这个Connection连接上也没有什么不一样的地方,唯一的不同是在java的 finally语句块中来关闭一个连接。在finally中关闭连接是一个好的编程习惯。这样,即使方法抛出异常,Connection也会被关闭并回收到连接池中去。 代码应该如下所示:
try{…
}catch(){…
}finally{ if(con!=null)con.close();}
三、分布式事务:
获得一个用来支持分布式事务的连接与获得连接池中的连接是很相似的。同样,不同之处在于DataSource的实现上的不同,而不是在应用程序中获得连接的方式上有什么不同。假设DataSource的实现可以与支持分布式事务中间层服务器一起工作,得到连接的代码还是如下所示:
Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/EmployeeDB"); Connection con = ds.getConnection("myPassword", "myUserName"); 由于性能上的原因,如果一个DataSource能够支持分布式的事务,它同样也可以支持连接池管理。
从应用程序设计者的观点来看。是否支持分布式的事务的连接对它来说没什么不同,唯一的不同是在事务的边界上(开始一个事务的地方和结束一个事务的地方),开始一个事务或者结束一个事务都是由事务服务器来控制的。应用程序不应该做任何可能妨碍服务的事情。应用程序不能够直接调用事务提交commit或者回滚rollback操作,也不能够使用事务的自动提交模式auto-commit mode(在数据库操作完成的时候自动的调用commit或者rollback)。
在一个连接参与了分布式事务的时候,下面的代码是你不能做的(con表示支持分布式事务的连接Connection)。
con.commit();或者con.rollback();或者con.setAutoCommit(true);对于通常的Connection 来说,缺省的是auto-commit模式。而对于支持分布式事务的Connection来说,缺省不是auto-commit模式。 注意,即使Connection是支持事务的,它也可以用于没有事务的情况。关于事务边界的限制只是是对分布式事务的情况下才成立的。
配置支持连接池的DataSource的时候,涉及到配置ConnectionPoolDataSource对象,这个对象是三层体系结构中的中间层来管理连接池的。同样的,在配置支持分布式事务的时候,需要配置XADataSource,XADataSource是中间层用来管理分布式事物的对象。 ConnectionPoolDataSource和XADataSource是由驱动提供商提供的,对应用程序的设计者来说是透明的。和基本的 DataSource一样,系统管理员来配置ConnectionPoolDataSource和XADataSource对象。
四、结果集:
结果集对象是一行行数据的容器。根据其目的,可以通过多种方法实现。RowSet及其相关的接口与JDBC2.0的标准扩展API有点不同,他们并不是驱动的一部分,RowSet是在驱动的上层实现的,可以由其它的任何人来实现他们。
任何类型的rowset都实现了RowSet接口,RowSet接口扩展了ResultSet接口。这样RowSet对象就有了ResultSet对象所有的功能。能够通过getXXX方法得到数据库中的某列值,通过updateXXX方法可以修改某列值,可以移动光标,是当前行变为另一行。
当然,我们更感兴趣的是RowSet接口提供的新的功能。作为一个JavaBean组件,RowSet对象可以增加或者删除一个listener(监听者),可以get或者set其属性值,这些属性中,有一个是字符串,表示一个对数据库Query请求,RowSet接口定义了设定参数的方法,也提供了执行这个请求的方法。这意味着RowSet对象能够执行查询请求,可以根据它产生的结果集进行计算。同样,RowSet也可以根据任何表格数据源进行计算,所以,它不局限于关系数据库。
从数据源得到数据之后,RowSet对象可以和数据源断开连接,rowset也可以被序列化。这样,RowSet就可以通过网络传递给瘦客户端。
RowSet可以被重新连接到数据源,这样,做的修改就可以存回到数据源中去。如果产生了一个listener,当RowSet的当前行移动,或者数据被修改的时候,监听者就会收到通知。例如,图形用户界面组件可以注册成为监听者,当RowSet更改的时候,图形用户界面接到通知,就可以修改界面,来符合它所表示的RowSet。
根据不同的需要,RowSet接口可以通过多种方法来实现。Java software已经写了一个 CachedRowSet实现,从http://developer.java.sun.com/developer/earlyAccess/crs /index.html中可以得到这个实现。
与CachedRowSet类不样的是,JDBCRowSet类总是保持一个和数据源的连接。这样,在ResultSet外围简单到加了一层,是基于JDBC技术的驱动看起来象是一个简单的JavaBean组件一样。
总结:JDBC2.0标准扩展API通过见DataSource注册到JNDI名字服务上,将JDBC技术扩展为一个全新的概念。使应用程序的代码更加精巧,易于控制。新的API支持了连接池,支持分布式的事务。最后,还使java应用程序可以在网络上传播结果集,是不可以滚动的ResultSet变成了可以滚动的RowSet。
分享到:
相关推荐
JDBC 2.0在JDK 1.2版本中引入了一系列增强的功能,极大地扩展了Java应用程序与数据库交互的能力。以下是对这些新功能的详细解释: 1. **可滚动结果集**: 在JDBC 1.1中,结果集通常是只能向前滚动的。但在JDBC 2.0...
1. **mm.mysql.jdbc-2.0pre5.tar.gz**:这是原始的 tar 包,但它使用 gzip 压缩了,所以扩展名为 .tar.gz。这通常是为了减小文件大小,便于传输和存储。 2. **ReadMe.html**:这个文件通常包含有关压缩包的使用、...
总的来说,Microsoft SQL Server JDBC Driver 2.0是Java开发者与SQL Server数据库交互的重要工具,它的出现极大地扩展了Java在企业级数据库应用中的角色,使得Java开发者能够充分利用SQL Server的强大功能,同时享受...
JDBC 2.0在1.0的基础上进行了扩展,引入了更多的特性和接口,提高了性能和灵活性: 1. **DatabaseMetaData**: 提供了关于数据库结构的信息,如表、列、索引等元数据。 2. **ResultSetMetaData**: 描述ResultSet对象...
总结起来,Spring 2.0 API在许多方面都进行了增强和优化,不仅提高了开发效率,也提升了软件的可维护性和可扩展性。随着版本的迭代,Spring框架不断完善,逐渐成为了Java企业级应用开发的首选框架。对于学习和理解...
本书提供了JDBCTMAPI的权威教程与参考·~JDBCAPI技术支持使用JavaTM编程语言进行通用数据访问,该版本进行了更新和扩展,覆盖整个JDBC 3.0API的内容,包括。iava.sql包和易于构建服务器端应用程序的javax.sql包。 ...
本书提供了JDBCTMAPI的权威教程与参考·~JDBCAPI技术支持使用JavaTM编程语言进行通用数据访问,该版本进行了更新和扩展,覆盖整个JDBC 3.0API的内容,包括。iava.sql包和易于构建服务器端应用程序的javax.sql包。 ...
本书提供了JDBCTMAPI的权威教程与参考·~JDBCAPI技术支持使用JavaTM编程语言进行通用数据访问,该版本进行了更新和扩展,覆盖整个JDBC 3.0API的内容,包括。iava.sql包和易于构建服务器端应用程序的javax.sql包。 ...
在数据存储层面,"keel_jdbc2.0"利用了Java的JDBC(Java Database Connectivity)接口,它是Java连接数据库的标准API。JDBC允许Java程序与各种数据库进行交互,包括SQL查询、事务处理等。通过JDBC,开发者可以灵活地...
内核部分,也就是JDBC 2.0 core API,由java.sql类包组成,被包含在各种版本的Java 2 SDK中。而扩展部分,即JDBC Standard Extension API,由javax.sql类包组成,只包含在Java 2 SDK的企业版中。至于JDBC 3.0,目前...
Spring 2.0 API是该框架的一个重要版本,引入了许多关键改进和新特性,为开发者提供了更强大的工具来构建企业级应用。在这个版本中,Spring API进行了大量的更新和优化,以提高性能和开发效率。 首先,让我们深入...
KingbaseV8 JDBC驱动是连接Kingbase数据库管理系统与Java应用程序之间的桥梁,允许Java开发者通过标准的Java Database Connectivity (JDBC) API来访问和操作KingbaseV8数据库。JDBC是Oracle公司提出的用于在Java程序...
Spring 2.0版本是一个重要的里程碑,它引入了许多新特性,提升了灵活性和可扩展性。本篇文章将深入探讨Spring 2.0 API,帮助开发者更好地理解和利用这个强大的框架。 ### 1. AOP(面向切面编程)增强 在Spring 2.0...
- Spring 2.0对数据访问层进行了大量优化,包括JDBC模板、Hibernate集成、JPA支持等。这些模板类简化了数据库操作,而ORM(对象关系映射)框架的集成则让开发者可以更方便地处理对象与数据库之间的映射。 5. **Web...
综上所述,这个"jsf2.0+jdbc实例"涵盖了JSF 2.0组件模型的使用,通过EL进行数据绑定,利用JDBC进行数据库操作,并在Tomcat 6.0上部署和运行。通过学习和实践这个实例,开发者可以深入了解JSF 2.0与数据库集成的基本...
JavaEE5 API是Java企业版的一个重要版本,它在Java平台标准版(JavaSE)的基础上扩展,提供了构建分布式、多层的企业级应用所需的各种服务和框架。这个API包括了Servlet、JSP、EJB(Enterprise JavaBeans)、JMS...
5. **JDBC 2.0核心功能和扩展**: JDBC 2.0引入了一些新特性,如CallableStatement用于调用数据库存储过程,以及ResultSet的滚动和分页功能。标准扩展则包含了如RowSet接口,允许结果集脱离数据库连接独立存在。 6...
在2.0.x版本中,Spring加强了对JDBC、Hibernate、iBatis等数据访问技术的整合,提供了Template和DAO模式,简化了数据库操作。比如,JdbcTemplate和HibernateTemplate,它们为数据库操作提供了简洁的API。 5. **...
- **JDBC2.0扩展标准开始引入**:DataSource是在JDBC2.0扩展标准中被引入的,随着JDBC版本的更新,DataSource的功能也在不断完善。 #### 连接池技术 连接池技术是通过预先创建一定数量的数据库连接并将这些连接...