其它章节的翻译参见:
http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4%E8%AF%B4%E6%98%8E%E4%B9%A6
=================================================================
序言
这个文档巩固了下面几个规范的内容:
“JDBC: Java的SQL类库”
“JDBC 2.1 类库”
“JDBC 2.0 标准扩展类库”
“JDBC 3.0 规范”
文档介绍了JDBC 4.0 类库的新特征和一些增强的特征。文档根据不同特征划分章节,这样可以更方便了解JDBC 4.0和3.0的不同之处。
读者如果想了解JDBC类库的详细信息,可以参考JDBC的类库文档(Javadoc),该文档可以由以下链接获得:
http://java.sun.com/products/jdbc
==========================================================================
介绍
1.1 JDBC类库
JDBC类库提供了通过Java语言访问关系数据库的能力。Java程序通过JDBC可以执行SQL语句,对获取的数据进行处理,并将变化了的数据存回数据库。在分布式异构环境中,我们还可以通过JDBC操纵多个数据源。
JDBC类库基于X/Open SQL通用语言接口(CLI),ODBC也基于此。JDBC提供了一个使用方便的映射方案:从Java语言到X/Open 通用语言接口和SQL标准的抽象实体及概念的映射。
自1997年的产生至今,JDBC类库已被广泛的接受和实现。类库的灵活性使得它可以有很多个具体实现。
1.2 平台
JDBC类库是Java平台的一部分。4.0版分为两个包:java.sql 和 javax.sql。这两个包都包含在JSE(Java桌面版)和JEE(Java企业版)中。
1.3 适合读者
该文档主要面向下列产品的开发者:
1. JDBC驱动程序
2. 基于数据库驱动提供三层架构服务的应用服务器
3. 使用JDBC类库来提供服务的工具
该文档想达到以下目的:
1.对使用JDBC类库的开发者的一个介绍
2.作为开发基于JDBC的类库的起始点
===============================================================
目标
2.1 历史
2.2 JDBC 4.0 之目标
---1.与JEE和JSE平台相处融洽
---2.与SQL:2003一致
---3.巩固前述四个规范
---4.提供中立于厂商的通用功能
---5.主要只针对SQL类型的数据源
---6.提供高层类库和工具的基础设施
---7.保持简单
---8.加强可靠性、可用性和可伸缩性
---9.保持向后兼容性
---10.与JDBC行集(RowSet)紧密联系
---11.与连接器架构(Connectors)兼容
---12.清晰描述JDBC需求
==================================================================
新特性概览
3.1 变更概览
JDBC 4.0 类库在以下领域注入了变化和新的元素:
1.自动加载java.sql.Driver
DriverManager.getConnection方法被修改以利用JSE的服务提供者机制来自动加载JDBC驱动。这样就不需要调用Class.forName方法了。
2.类库使用更容易
添加了标准JDBC注释。支持数据集(DataSet),使Java应用调用SQL数据源更加方便。
3.ROWID数据类型
添加了java.sql.RowID数据类型,使得JDBC程序可以访问SQL ROWID。
4.支持本地字符集转换(National Character Set Conversion)
添加了一些JDBC类型:NCHAR, NVARCHAR, LONGVARCHAR, NCLOB。对应的方法setNString, setNCharacterStream, setNClob也被添加到PreparedStatement接口中。
5.增强了对BLOB和CLOB的支持
Connection接口添加了生产BLOB,CLOB和NCLOB对象的方法。PreparedStatement接口添加了通过InputStream插入BLOB的方法和使用Reader插入CLOB,NCLOB的方法。Blob, Clob和NClob现在可以通过free方法释放资源。
6.SQL/XML和XML支持
SQL2003引入了用SQL表达XML数据的概念。一些类库被添加进来以支持应用对这些数据的访问。
7.包装器(Wrapper)模式
添加了解包JDBC实现的能力,使开发者可以利用在厂商实现中提供的非标准JDBC方法。
8.加强的SQLException
添加对JSE链式异常的支持。SQLException现在支持Iterable接口,所以我们可以在for-each循环里读取SQLExceptions。新添加了两类SQL异常:SQLTransientException和SQLNonTransientException。每个类都提供映射到普通SQLState类型值(译者注:SQLState?)的子类。
9.连接管理
Connection和Statement接口得到了增强,以利于对连接状态的跟踪,并增加在池环境中管理Statement对象的灵活性。
10.JDBC类库的变化
下面的JDBC接口被修改:
---10.1 Connection
添加了下列方法:createBlob, createClob, createNClob, createQueryObject, isValid, createXML, getClientInfo, setClientInfo。
---10.2 CallableStatement
添加了下列方法:getRowId, setRowId, getNClob, setNString, setNCharacterStream, setNClob, getSQLXML, setSQLXML。重载了setClob和setBlob方法。
---10.3 DatabaseMetaData
添加了下列方法:getRowIdLifetime, autoCommitFailureClosesAllResultSets, providesQueryObjectGenerator, getClientInfoProperties, supportsStoredFunctionsUsingCallSyntax. 重载了getSchemas方法。
---10.4 PreparedStatement
添加了下列方法:setRowId, setNString, setNCharacterStream, setSQLXML, isPoolable, setPoolable, setNClob。重载了setClob和setBlob方法。
---10.5 ResultSet
添加了下列方法:getHoldability, getRowId, updateRowID, getNClob, isClosed, updateNString, getSQLXML, updateSQLXML, updateNClob。
---10.6 Statement
添加了isClosed和getResultSetHoldability方法。
---10.7 DataSource
添加了createQueryObject方法。
---10.8 PooledConnection
添加了addStatementEventListener和removeStatementEventListener方法。
====================================================================
概览
JDBC类库使得Java程序可以访问多个数据源,但在大多数情况下,这个数据源是关系数据库,并且通过SQL访问。然而,实现JDBC技术的驱动也可以基于其它的数据源,包括遗留文件系统和面向对象的系统。
JDBC类库的主要目的就是提供应用程序访问多种数据源的标准接口。
这一章介绍JDBC类库的一些关键概念,并描述JDBC应用的两个通用环境及其中的功能实现。
4.1 创建连接
JDBC类库中的Connection接口代表了底层数据源的一个连接。
在典型场景中,JDBC应用程序使用两种机制连接到数据源:
1.DriverManager --- 这个类在JDBC 1.0中引入,它使用硬编码的URL来加载驱动。
2.DataSource --- 这个接口在JDBC 2.0可选包中引入。它优于DriverManager方式,因为它隐藏了数据源的详细信息。我们通过设置DataSource的属性来标明它代表的数据源。当getConnection方法被调用时,DataSource对象会返回一个对应的连接。我们可以通过改变DataSource的属性来使它指向另一个数据源,而不是改变程序代码。而且,如果DataSource的实现改变了,使用它的应用程序代码不需要改变。
JDBC类库也定义了两个DataSource的扩展,用来支持企业级应用,如下:
1.ConnectionPoolDataSource --- 支持物理连接的缓存和重用,这样可以提高应用的性能和可伸缩性。
2.XADataSource --- 提供可以使用在分布式事务中的连接。