Google announces a new topic now: Google Reader. It's a web rss reader. You can log in with your Gmail account. It can edit blog's categories, all functions are ease to use. I propose you to use this. :)
posted @ 2005-10-17 16:03 罗明 阅读(473) | 评论 (0)编辑 收藏
 
i have just installed Ubuntu. It's a linux based on Debian. The whole system is very beautiful and ease to use, and i think the support for Chinese is also excellent, although     there are no zh input languages yet. I'm now finding one.

The necessary apps are all there.

(i had a problem on connecting internet, later i found i hadn't plugged the network cable : ) )

i think i will be a linux "tiger" soon.

Go on, be a tiger.
posted @ 2005-10-10 12:27 罗明 阅读(313) | 评论 (0)编辑 收藏
 
i have just installed Ubuntu. It's a linux based on Debian. The whole system is very beautiful and ease to use, and i think the support for Chinese is also excellent, although there are no zh input languages yet. I'm now finding one.

The necessary apps are all there.

(i had a problem on connecting internet, later i found i hadn't plugged the network cable : ) )

i think i will be a linux "tiger" soon.

Go on, be a tiger.
posted @ 2005-10-08 19:51 罗明 阅读(75) | 评论 (0)编辑 收藏
 

公告

  • 希望大家经常过来,Blog就是写给大家看的,对吧,呵呵:)
  • 请大家在转载的时候一定要注明作者(Andyluo)和出处(http://spaces.msn.com/members/andyluo197),谢谢合作
posted @ 2005-10-07 08:36 罗明 阅读(99) | 评论 (0)编辑 收藏
 

问题虚拟背景:
A项目组要实现一个基于Sql Server的应用,但工作环境只安装有MySql(公司对开源比较看好: )),而且客户有可能会转移到Oracle数据库环境。要求应用具有数据库移植能力和快速更换能力,使应用在工作环境调试成功后能迅速转移到客户的Sql Server环境,而且将来可以方便地转向Oracle。

Andy提出的可用方案:
1、使用标准JDBC
2、使用抽象类定义数据访问单元
3、定义具体数据源访问单元继承2中接口

代码示例:
定义数据访问单元抽象类,包含数据访问逻辑

publicabstractclassDataManager
{
protectedstaticStringconString=null;
protectedstaticStringurlString=null;
publicDataType[]getData()
{
//fetchdatausingstandardJDBCwithconStringandurlString
}


publicvoidsetData(DataType[]dataArray)
{
//storedatausingstandardJDBCwithconStringandurlString
}

}

定义具体数据源访问单元

publicclassHsqlDataManagerextendsDataManager
{
static
{
conString
="org.hsqldb.jdbcDriver";
urlString
="jdbc:hsqldb:db/YourDatabaseName";
}

}


publicclassOdbcBlogManagerextendsAbstractBlogManager
{
static
{
conString
="sun.jdbc.odbc.JdbcOdbcDriver";
urlString
="jdbc:odbc:db/YourDatabaseName";
}

}


在调用数据访问层时,可以声明一个DataManager的引用,然后在构造器中实例化为具体子类,如:

publicclassAndy
{
privateDataManagerdataManager=null;

publicAndy
{
dataManager
=newHsqlDataManager();
//或者在资源文件里填写具体子类,然后在这里动态加载并实例化
}


publicvoiddoSomething()
{
dataManager.getData();

}

}


以后要迁移到另一个数据库(有JDBC驱动),只需定义具体子类继承DataManager(如HsqlDataManager),然后修改资源文件中的DataManager名称(或者将new的类名改一下),不需要修改代码。

这兴许可以解释另一个问题:不赞成使用存储过程,而应将SQL语句嵌在代码中(适用于Java;微软注定.Net不会有平台移植性,数据库大都用Sql Server,所以写存储过程还是比较好的)。

(我在我的一个Eclipse RCP项目里使用了这种模式,从Sql server 2000到Hsql,特别方便,看起来感觉也比较好)

欢迎大家拍转,^_^

posted @ 2005-10-07 00:36 罗明 阅读(54) | 评论 (0)编辑 收藏
 

Job代表一个异步操作。
要执行的操作在run方法里。

//定义一个Job
classAJobextendsJob
{
publicAJob()
{
super("Andy'sJob");
}


publicIStatusrun(IProgressMonitormonitor)
{
System.out.println(
"ThisisAndy'sJob");
returnStatus.OK_STATUS;
}

}



schedule后,任务在平台线程等待队列中排队,等待调度执行。
调用方式1:

//异步调用
AJobjob=newAJob();
job.schedule();
//唤起平台线程来调度这个Job

调用方式2:

//结束后再运行
AJobjob=newAJob();
job.schedule();
//dosomeotherthings.
job.join();//block,直到job完成或调用线程被中断
if(job.getResult().isOk())
{
//Jobcompletedwithsuccess.
}

else
{
//Jobdidnotcompletesuccessfully.
}


取消一个Job:
if(!job.cancel())
{
job.join();
}
//cancel可能不会立即成功,我们用join等待cancel操作完成。
posted @ 2005-10-06 23:35 罗明 阅读(49) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第七章 - 数据库元数据(关键类、获取信息、查看特性、查看限制、事务支持、新增方法、方法更新) - 译文

数据库元数据

第7章 数据库元数据

JDBC驱动通过实现DatabaseMetaData接口来提供底层数据源的信息。DatabaseMetaData接口主要被应用服务器和工具使用,以此决定怎样跟给定数据源交互。应用也可以通过DatabaseMetaData的方法得到数据源的信息,但这不常用。

DatabaseMetaData?接口有超过150个方法,根据提供的信息可以分为以下几类:

DatabaseMetaData?接口还有超过40个字段,这些字段用于DatabaseMetaData中各种方法的常量返回值。

这一章粗略介绍一下DatabaseMetaData接口,通过举例子对元数据方法进行分类,同时介绍一些新的方法。详细介绍请参考JDBC 4.0 类库规范

JDBC中的ResultSetMetaData接口将在第15章“结果集”介绍。

7.1 创建DatabaseMetaData对象

DatabaseMetaData?对象由Connection的getMetaData方法创建,然后我们可以利用它来动态获取底层数据源的信息。代码示例 7-1 创建了一个DatabaseMetaData对象,并用它来查看表名允许的最大字符数。

// con是一个Connection对象
DatabaseMetaData dbmd = con.getMetadata();
int maxLen = dbmd.getMaxTableNameLength();

代码示例 7-1 创建和使用DatabaseMetaData对象

7.2 获取一般信息

DatabaseMetaData?中有一类方法用于获取底层数据源的一般信息,或者它的一些实现细节。这类方法有:

7.3 查看支持的特性

大量DatabaseMetaData方法可以用来判断驱动或底层数据源是否支持某个特性或特性集。还有一些方法可以告知提供支持的级别。

判断是否支持某个特性的方法如下:

查看特性支持级别的方法:

7.4 数据源限制

另一组方法提供数据源对操作的限制信息,如下:

方法返回一个整型的限制数。0表示没有限制或未知限制。

7.5 SQL对象及其属性

DatabaseMetaData?中有一组方法提供组成数据源之SQL对象的信息。这组方法也包含获取SQL对象属性的方法。方法的返回值是一个ResultSet,ResultSet的每一行代表一个特定对象。例如,getUDTs方法返回的ResultSet里每一行都是数据源里定义的一个UDT(user-defined type)。这类方法主要有:

7.6 事务支持

一小部分方法提供数据源所支持事务的语义信息。这类方法主要有:

7.7 新增方法

JDBC 4.0 类库在DatabaseMetaData中引入了下列新方法:

这些方法的完整定义见JDBC 4.0 类库规范(javadoc)。

7.8 经过修改的方法

JDBC 4.0 类库修改了DatabaseMetaData中下列方法的定义: (原文:Clarified to indicate that if the database supports SQL distinct types, then getTypeInfo() will return a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT. If the database supports SQL structured types, then getTypeInfo() will return a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT. Support has also been added for the new data types SQLXML and ROWID.)

(原文:Clarified that the method retrieves a description of the foreign key columns in the given foreign key table that reference the primary key or the unique constraint columns of the parent table (could be the same or a different table). The number of columns returned from the parent table must match the number of columns that make up the foreign key. They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ.)

(Clarified that the return value for COLUMN_DEF that the default value for the column, should be interpreted as a string when the value is enclosed in quotes.)

JDBC 4.0 类库规范中有这些方法更新后的定义。

翻译进度请参考http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4说明书

posted @ 2005-10-06 21:58 罗明 阅读(114) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第六章 - 兼容性(定义、指导原则、JDBC 1.0、2.0、3.0、4.0、决定级别、不赞成使用的API) - 译文

兼容性

第6章 兼容性

这一章描述了JDBC类库实现在各个兼容级别要支持的特性。一个JDBC类库实现包含了一个JDBC驱动和底层数据源。兼容性定义了在驱动层之上要实现的特性。

任何没有提到的特性都是可选的。通常,如果底层数据源不支持,驱动不需要实现这个特性。

6.1 定义

为了避免混淆,我们将在兼容性的讨论中使用以下术语:

6.2 指导原则和要求

下列指导原则适合所有级别的兼容性:


入门级别SQL92(Entry Level SQL92)是JDBC类库实现要支持的最低SQL级别。对SQL99或SQL2003中特性的访问应该与SQL99或SQL2003规范的相关部分一致。


注意 :JDBC类库实现要支持“SQL92 - 过渡级别”中定义的DROP TABLE命令,但对CASCADE和RESTRICT选项的支持 是可选的。而且,当要被删除的表有视图(views)和完整性约束时,DROP TABLE的行为也是实现类库的厂商自己定义的。

6.3 JDBC 1.0 类库兼容性

与JDBC 1.0 类库兼容的驱动应满足以下条件:

6.4 JDBC 2.0 类库兼容性

与JDBC 2.0 类库兼容的驱动应满足以下条件:

6.5 JDBC 3.0 类库的兼容性

与JDBC 3.0 类库兼容的驱动应满足以下条件:

6.6 JDBC 4.0 类库的兼容性

与JDBC 4.0 类库兼容的驱动应满足以下条件:


注意 :这一段将在下一版草案更新

6.7 决定兼容级别

JDBC 类库是Java平台不可或缺的一部分。与JDBC类库规范兼容是与整个平台兼容的一个子集。


注意 :在编写这个文档之际,还没有独立于平台检查JDBC类库兼容级别的。

6.8 不赞成使用的类库

不赞成使用是针对类、接口、构造器、方法或字段来说的,即不再被推荐使用,而且可能在将来某个版本不复存在。

JDBC 2.0类库中不赞成使用的构造器和方法: java.sql.CallableStatement.getBigDecimal(int, int)

java.sql.Date(int, int, int)
java.sql.Date.getHours()
java.sql.Date.getMinutes()
java.sql.Date.getSeconds()
java.sql.Date.setHours(int)
java.sql.Date.setMinutes(int)
java.sql.Date.setSeconds(int)

java.sql.DriverManager.getLogStream()
java.sql.DriverManager.setLogStream(PrintStream?)

java.sql.PreparedStatement.setUnicodeStream(int, InputStream?, int)

java.sql.ResultSet.getBigDecimal(int, int)
java.sql.ResultSet.getBigDecimal(String, int)
java.sql.ResultSet.getUnicodeStream(int)
java.sql.ResultSet.getUnicodeStream(String)

java.sql.Time(int, int, int)
java.sql.Time.getDate()
java.sql.Time.getDay()
java.sql.Time.getMonth()
java.sql.Time.getYear()
java.sql.Time.setDate(int)
java.sql.Time.setMonth(int)
java.sql.Time.setYear(int)

java.sql.Timestamp(int, int, int, int, int, int, int)

也可参考http://www.pgsqldb.org/twiki/bin/view/PgSQL/兼容性

posted @ 2005-10-06 19:25 罗明 阅读(83) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第五章 - 类和接口(java.sql包、javax.sql包) - 译文

类和接口

第五章 类和接口

以下类和接口组成了JDBC类库

5.1 java.sql包

JDBC核心类库包含在java.sql包中。java.sql包中的注释(annotations)、枚举、类和接口如下。注释、枚举和类使用粗体;接口使用正常字体。

java.sql.AutoGeneratedKeys
java.sql.Array
java.sql.BaseQuery
java.sql.BatchUpdateException
java.sql.Blob
java.sql.CallableStatement
java.sql.ClientInfoException
java.sql.Column
java.sql.Clob
java.sql.Connection
java.sql.DataSet
java.sql.DataTruncation
java.sql.DatabaseMetaData
java.sql.Date
java.sql.Driver
java.sql.DriverManager
java.sql.DriverPropertyInfo
java.sql.NClob
java.sql.ParameterMetaData
java.sql.PreparedStatement
java.sql.Query
java.sql.QueryObjectFactory
java.sql.QueryObjectGenerator
java.sql.Ref
java.sql.ResultSet
java.sql.ResultSetMetaData
java.sql.RowId
java.sql.RowIdLifeTime
java.sql.Savepoint
java.sql.SQLData
java.sql.SQLDataException
java.sql.SQLException
java.sql.SQLInput
java.sql.SQLIntegrityConstraintViolationException
java.sql.SQLInvalidAuthorizationSpecException
java.sql.SQLNonTransientConnectionException
java.sql.SQLNonTransientException
java.sql.SQLOutput
java.sql.SQLPermission
java.sql.SQLSyntaxErrorException
java.sql.SQLTimeoutException
java.sql.SQLTransactionRollbackException
java.sql.SQLTransientConnectionException
java.sql.SQLTransientException
java.sql.SQLXML
java.sql.SQLWarning
java.sql.Statement
java.sql.Struct
java.sql.Table
java.sql.Time
java.sql.Timestamp
java.sql.Types
java.sql.Update
java.sql.Wrapper

下列类和接口是新增的或经过修改的。新的类和接口用粗体标出。

java.sql.AutoGeneratedKeys
java.sql.BaseQuery
java.sql.Blob
java.sql.CallableStatement
java.sql.ClientInfoException
java.sql.Clob
java.sql.Column
java.sql.Connection
java.sql.DatabaseMetaData
java.sql.NClob
java.sql.PreparedStatement
java.sql.Query
java.sql.QueryObjectFactory
java.sql.QueryObjectGenerator
java.sql.ResultSet
java.sql.RowId
java.sql.RowIdLifeTime
java.sql.SQLDataException
java.sql.SQLException
java.sql.SQLIntegrityConstraintViolationException
java.sql.SQLInvalidAuthorizationSpecException
java.sql.SQLNonTransientConnectionException
java.sql.SQLNonTransientException
java.sql.SQLSyntaxErrorException
java.sql.SQLTimeoutException
java.sql.SQLTransactionRollbackException
java.sql.SQLTransientConnectionException
java.sql.SQLTransientException
java.sql.SQLXML
java.sql.SQLWarning
java.sql.Statement
java.sql.Table
java.sql.Types
java.sql.Update
java.sql.Wrapper
javax.sql.CommonDataSource
javax.sql.StatementEvent
javax.sql.StatementEventListener

图5-1显示了java.sql包中关键类和接口之间的交互和关系,以及用于创建语句、设置参数、检索结果的方法。
r_java.sql.gif

图5-1 java.sql包中主要类和接口之间的关系

5.2 javax.sql包

java.sql包中的类和接口如下。类使用粗体;接口使用正常字体。

javax.sql.CommonDataSource
javax.sql.ConnectionEvent
javax.sql.ConnectionEventListener
javax.sql.ConnectionPoolDataSource
javax.sql.DataSource
javax.sql.PooledConnection
javax.sql.RowSet
javax.sql.RowSetEvent
javax.sql.RowSetInternal
javax.sql.RowSetListener
javax.sql.RowSetMetaData
javax.sql.RowSetReader
javax.sql.RowSetWriter
javax.sql.StatementEvent
javax.sql.StatementEventListener
javax.sql.XAConnection
javax.sql.XADataSource


注意 :javax.sql包中的类和接口最开始是作为JDBC 2.0可选包引入的。可选包独立于java.sql包提供。 现在两者都包含在J2SE 1.4中。

图5-2,图5-3,图5-4和图5-5显示了以下功能领域中关键类和接口之间的关系:DataSource对象,池化连接,分布式事务,行集。

r_5_2.gif

图5-2 javax.sql.DataSource和java.sql.Connection之间的关系

r_5_3.gif

图5-3 连接池化过程中涉及的关系

o_5_4.gif

图5-4 分布式事务支持中涉及的关系

r_5_5.gif

图5-5 行集涉及的关系

-- Main.Andyluo - 6 Oct 2005

posted @ 2005-10-06 18:40 罗明 阅读(105) | 评论 (0)编辑 收藏
 
使应用具有快速更换数据库能力

问题虚拟背景:
A项目组要实现一个基于Sql Server的应用,但工作环境只安装有MySql(公司对开源比较看好: )),而且客户有可能会转移到Oracle数据库环境。要求应用具有数据库移植能力和快速更换能力,使应用在工作环境调试成功后能迅速转移到客户的Sql Server环境,而且将来可以方便地转向Oracle。

Andy提出的可用方案:
1、使用标准JDBC
2、使用抽象类定义数据访问单元
3、定义具体数据源访问单元继承2中接口

代码示例:
定义数据访问单元抽象类,包含数据访问逻辑

public abstract class DataManager
{
 
protected static String conString = null;
 
protected static String urlString = null;
 
public DataType[ ] getData()
 
{
   
//fetch data using standard JDBC with conString and urlString
 }


 
public void setData(DataType[ ] dataArray)
 
{
   
//store data using standard JDBC with conString and urlString
 }

}

定义具体数据源访问单元

public class HsqlDataManager extends DataManager
{
 
static
 
{
  conString 
= "org.hsqldb.jdbcDriver";
  urlString 
= "jdbc:hsqldb:db/YourDatabaseName";
 }

}


public class OdbcBlogManager extends AbstractBlogManager
{
 
static
 
{
  conString 
= "sun.jdbc.odbc.JdbcOdbcDriver";
  urlString 
= "jdbc:odbc:db/YourDatabaseName";
 }

}


在调用数据访问层时,可以声明一个DataManager的引用,然后在构造器中实例化为具体子类,如:

public class Andy
{
 
private DataManager dataManager = null;
 
 
public Andy
 
{
  dataManager 
= new HsqlDataManager();
  
//或者在资源文件里填写具体子类,然后在这里动态加载并实例化
 }
 

 
public void doSomething()
 
{
  dataManager.getData();
  
 }

}


以后要迁移到另一个数据库(有JDBC驱动),只需定义具体子类继承DataManager(如HsqlDataManager),然后修改资源文件中的DataManager名称(或者将new的类名改一下),不需要修改代码。

这兴许可以解释另一个问题:不赞成使用存储过程,而应将SQL语句嵌在代码中(适用于Java;微软注定.Net不会有平台移植性,数据库大都用Sql Server,所以写存储过程还是比较好的)。

(我在我的一个Eclipse RCP项目里使用了这种模式,从Sql server 2000到Hsql,特别方便,看起来感觉也比较好)

欢迎大家拍转,^_^

posted @ 2005-10-06 15:49 罗明 阅读(927) | 评论 (2)编辑 收藏
 
在Eclipse Plugin中执行任务

Job代表一个异步操作。
要执行的操作写在run方法里。

//定义一个Job
class AJob extends Job
{
 
public AJob()
 
{
  
super("Andy's Job");
 }


 
public IStatus run(IProgressMonitor monitor)
 
{
  System.out.println(
"This is Andy's Job");
  
return Status.OK_STATUS;
 }

}



schedule后,任务在平台线程等待队列中排队,等待调度执行。
调用方式1:

//异步调用
AJob job = new AJob();
job.schedule(); 
//唤起平台线程来调度这个Job

调用方式2:

//结束后再运行
AJob job = new AJob();
job.schedule();
 
// do some other things.
job.join();        //block,直到job完成或调用线程被中断
if(job.getResult().isOk())
{
 
//Job completed with success.
}

else
{
 
//Job did not complete successfully.
}


取消一个Job:
if(!job.cancel())
{
 job.join();
}
 //cancel可能不会立即成功,我们用join等待cancel操作完成。
posted @ 2005-10-06 15:26 罗明 阅读(829) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第七章 - 数据库元数据(关键类、获取信息、查看特性、查看限制、事务支持、新增方法、方法更新) - 译文

数据库元数据

第7章 数据库元数据

JDBC驱动通过实现DatabaseMetaData接口来提供底层数据源的信息。DatabaseMetaData接口主要被应用服务器和工具使用,以此决定怎样跟给定数据源交互。普通应用也可以通过DatabaseMetaData的方法得到数据源的信息,但这不常用。

DatabaseMetaData?接口有超过150个方法,根据提供的信息可以分为以下几类:

DatabaseMetaData?接口还有超过40个字段,这些字段用于DatabaseMetaData中各种方法的常量返回值。

这一章粗略介绍一下DatabaseMetaData接口,通过举例子对元数据方法进行分类,同时介绍一些新的方法。详细介绍请参考JDBC 4.0 类库规范

JDBC中的ResultSetMetaData接口将在第15章“结果集”介绍。

7.1 创建DatabaseMetaData对象

DatabaseMetaData?对象由Connection的getMetaData方法创建,然后我们可以利用它来动态获取底层数据源的信息。代码示例 7-1 创建了一个DatabaseMetaData对象,并用它来查看表名允许的最大字符数。

// con是一个Connection对象
DatabaseMetaData dbmd = con.getMetadata();
int maxLen = dbmd.getMaxTableNameLength();

代码示例 7-1 创建和使用DatabaseMetaData对象

7.2 获取一般信息

DatabaseMetaData?中有一类方法用于获取底层数据源的一般信息,或者它的一些实现细节。这类方法有:

7.3 查看支持的特性

大量DatabaseMetaData方法可以用来判断驱动或底层数据源是否支持某个特性或特性集。还有一些方法可以告知提供支持的级别。

判断是否支持某个特性的方法如下:

查看特性支持级别的方法:

7.4 数据源限制

另一组方法提供数据源对操作的限制信息,如下:

方法返回一个整型的限制数。0表示没有限制或未知限制。

7.5 SQL对象及其属性

DatabaseMetaData?中有一组方法提供组成数据源之SQL对象的信息。这组方法也包含获取SQL对象属性的方法。方法的返回值是一个ResultSet,ResultSet的每一行代表一个特定对象。例如,getUDTs方法返回的ResultSet里每一行都是数据源里定义的一个UDT(user-defined type)。这类方法主要有:

7.6 事务支持

一小部分方法提供数据源所支持事务的语义信息。这类方法主要有:

7.7 新增方法

JDBC 4.0 类库在DatabaseMetaData中引入了下列新方法:

这些方法的完整定义见JDBC 4.0 类库规范(javadoc)。

7.8 经过修改的方法

JDBC 4.0 类库修改了DatabaseMetaData中下列方法的定义: (原文:Clarified to indicate that if the database supports SQL distinct types, then getTypeInfo() will return a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT. If the database supports SQL structured types, then getTypeInfo() will return a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT. Support has also been added for the new data types SQLXML and ROWID.)

(原文:Clarified that the method retrieves a description of the foreign key columns in the given foreign key table that reference the primary key or the unique constraint columns of the parent table (could be the same or a different table). The number of columns returned from the parent table must match the number of columns that make up the foreign key. They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ.)

(Clarified that the return value for COLUMN_DEF that the default value for the column, should be interpreted as a string when the value is enclosed in quotes.)

JDBC 4.0 类库规范中有这些方法更新后的定义。

翻译进度请参考http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4说明书

posted @ 2005-10-06 13:45 罗明 阅读(2955) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第六章 - 兼容性(定义、指导原则、JDBC 1.0、2.0、3.0、4.0、决定级别、不赞成使用的API) - 译文

兼容性

第6章 兼容性

这一章描述了JDBC类库实现在各个兼容级别要支持的特性。一个JDBC类库实现包含了一个JDBC驱动和底层数据源。兼容性定义了在驱动层之上要实现的特性。

任何没有提到的特性都是可选的。通常,如果底层数据源不支持,驱动不需要实现这个特性。

6.1 定义

为了避免混淆,我们将在兼容性的讨论中使用以下术语:

6.2 指导原则和要求

下列指导原则适合所有级别的兼容性:


入门级别SQL92(Entry Level SQL92)是JDBC类库实现要支持的最低SQL级别。对SQL99或SQL2003中特性的访问应该与SQL99或SQL2003规范的相关部分一致。


注意 :JDBC类库实现要支持“SQL92 - 过渡级别”中定义的DROP TABLE命令,但对CASCADE和RESTRICT选项的支持 是可选的。而且,当要被删除的表有视图(views)和完整性约束时,DROP TABLE的行为也是实现类库的厂商自己定义的。

6.3 JDBC 1.0 类库兼容性

与JDBC 1.0 类库兼容的驱动应满足以下条件:

6.4 JDBC 2.0 类库兼容性

与JDBC 2.0 类库兼容的驱动应满足以下条件:

6.5 JDBC 3.0 类库的兼容性

与JDBC 3.0 类库兼容的驱动应满足以下条件:

6.6 JDBC 4.0 类库的兼容性

与JDBC 4.0 类库兼容的驱动应满足以下条件:


注意 :这一段将在下一版草案更新

6.7 决定兼容级别

JDBC 类库是Java平台不可或缺的一部分。与JDBC类库规范兼容是与整个平台兼容的一个子集。


注意 :在编写这个文档之际,还没有独立于平台检查JDBC类库兼容级别的。

6.8 不赞成使用的类库

不赞成使用是针对类、接口、构造器、方法或字段来说的,即不再被推荐使用,而且可能在将来某个版本不复存在。

JDBC 2.0类库中不赞成使用的构造器和方法: java.sql.CallableStatement.getBigDecimal(int, int)

java.sql.Date(int, int, int)
java.sql.Date.getHours()
java.sql.Date.getMinutes()
java.sql.Date.getSeconds()
java.sql.Date.setHours(int)
java.sql.Date.setMinutes(int)
java.sql.Date.setSeconds(int)

java.sql.DriverManager.getLogStream()
java.sql.DriverManager.setLogStream(PrintStream?)

java.sql.PreparedStatement.setUnicodeStream(int, InputStream?, int)

java.sql.ResultSet.getBigDecimal(int, int)
java.sql.ResultSet.getBigDecimal(String, int)
java.sql.ResultSet.getUnicodeStream(int)
java.sql.ResultSet.getUnicodeStream(String)

java.sql.Time(int, int, int)
java.sql.Time.getDate()
java.sql.Time.getDay()
java.sql.Time.getMonth()
java.sql.Time.getYear()
java.sql.Time.setDate(int)
java.sql.Time.setMonth(int)
java.sql.Time.setYear(int)

java.sql.Timestamp(int, int, int, int, int, int, int)

也可参考http://www.pgsqldb.org/twiki/bin/view/PgSQL/兼容性  

posted @ 2005-10-06 11:17 罗明 阅读(2172) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第五章 - 类和接口(java.sql包、javax.sql包) - 译文

类和接口

第五章 类和接口

以下类和接口组成了JDBC类库

5.1 java.sql包

JDBC核心类库包含在java.sql包中。java.sql包中的注释(annotations)、枚举、类和接口如下。注释、枚举和类使用粗体;接口使用正常字体。

java.sql.AutoGeneratedKeys
java.sql.Array
java.sql.BaseQuery
java.sql.BatchUpdateException
java.sql.Blob
java.sql.CallableStatement
java.sql.ClientInfoException
java.sql.Column
java.sql.Clob
java.sql.Connection
java.sql.DataSet
java.sql.DataTruncation
java.sql.DatabaseMetaData
java.sql.Date
java.sql.Driver
java.sql.DriverManager
java.sql.DriverPropertyInfo
java.sql.NClob
java.sql.ParameterMetaData
java.sql.PreparedStatement
java.sql.Query
java.sql.QueryObjectFactory
java.sql.QueryObjectGenerator
java.sql.Ref
java.sql.ResultSet
java.sql.ResultSetMetaData
java.sql.RowId
java.sql.RowIdLifeTime
java.sql.Savepoint
java.sql.SQLData
java.sql.SQLDataException
java.sql.SQLException
java.sql.SQLInput
java.sql.SQLIntegrityConstraintViolationException
java.sql.SQLInvalidAuthorizationSpecException
java.sql.SQLNonTransientConnectionException
java.sql.SQLNonTransientException
java.sql.SQLOutput
java.sql.SQLPermission
java.sql.SQLSyntaxErrorException
java.sql.SQLTimeoutException
java.sql.SQLTransactionRollbackException
java.sql.SQLTransientConnectionException
java.sql.SQLTransientException
java.sql.SQLXML
java.sql.SQLWarning
java.sql.Statement
java.sql.Struct
java.sql.Table
java.sql.Time
java.sql.Timestamp
java.sql.Types
java.sql.Update
java.sql.Wrapper

下列类和接口是新增的或经过修改的。新的类和接口用粗体标出。

java.sql.AutoGeneratedKeys
java.sql.BaseQuery
java.sql.Blob
java.sql.CallableStatement
java.sql.ClientInfoException
java.sql.Clob
java.sql.Column
java.sql.Connection
java.sql.DatabaseMetaData
java.sql.NClob
java.sql.PreparedStatement
java.sql.Query
java.sql.QueryObjectFactory
java.sql.QueryObjectGenerator
java.sql.ResultSet
java.sql.RowId
java.sql.RowIdLifeTime
java.sql.SQLDataException
java.sql.SQLException
java.sql.SQLIntegrityConstraintViolationException
java.sql.SQLInvalidAuthorizationSpecException
java.sql.SQLNonTransientConnectionException
java.sql.SQLNonTransientException
java.sql.SQLSyntaxErrorException
java.sql.SQLTimeoutException
java.sql.SQLTransactionRollbackException
java.sql.SQLTransientConnectionException
java.sql.SQLTransientException
java.sql.SQLXML
java.sql.SQLWarning
java.sql.Statement
java.sql.Table
java.sql.Types
java.sql.Update
java.sql.Wrapper
javax.sql.CommonDataSource
javax.sql.StatementEvent
javax.sql.StatementEventListener

图5-1显示了java.sql包中关键类和接口之间的交互和关系,以及用于创建语句、设置参数、检索结果的方法。
r_java.sql.gif

图5-1 java.sql包中主要类和接口之间的关系

5.2 javax.sql包

java.sql包中的类和接口如下。类使用粗体;接口使用正常字体。

javax.sql.CommonDataSource
javax.sql.ConnectionEvent
javax.sql.ConnectionEventListener
javax.sql.ConnectionPoolDataSource
javax.sql.DataSource
javax.sql.PooledConnection
javax.sql.RowSet
javax.sql.RowSetEvent
javax.sql.RowSetInternal
javax.sql.RowSetListener
javax.sql.RowSetMetaData
javax.sql.RowSetReader
javax.sql.RowSetWriter
javax.sql.StatementEvent
javax.sql.StatementEventListener
javax.sql.XAConnection
javax.sql.XADataSource


注意 :javax.sql包中的类和接口最开始是作为JDBC 2.0可选包引入的。可选包独立于java.sql包提供。 现在两者都包含在J2SE 1.4中。

图5-2,图5-3,图5-4和图5-5显示了以下功能领域中关键类和接口之间的关系:DataSource对象,池化连接,分布式事务,行集。

r_5_2.gif

图5-2 javax.sql.DataSource和java.sql.Connection之间的关系

r_5_3.gif

图5-3 连接池化过程中涉及的关系

o_5_4.gif

图5-4 分布式事务支持中涉及的关系

r_5_5.gif

图5-5 行集涉及的关系

-- Main.Andyluo - 6 Oct 2005

也可参照http://www.pgsqldb.org/twiki/bin/view/PgSQL/类和接口

posted @ 2005-10-06 10:37 罗明 阅读(3707) | 评论 (1)编辑 收藏
 
JDBC 4.0 规范 - 第四章 - 概述(建立连接、执行SQL、模型比较、JDBC in J2EE)(续) - 译文

==========================================================

概述

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 --- 提供可以使用在分布式事务中的连接。

=========================================================

4.2 执行SQL语句和操纵结果

连接建立后,我们可以使用JDBC类库对目标数据源进行查询和更新。JDBC类库提供了对大多数SQL2003通用特性的支持。由于各个厂商可能要支持不同的特性,JDBC类库提供了一个DatabaseMetadata接口。应用可以通过这个接口了解数据源是否支持某个特性。JDBC类库也定义了转义语义来支持特定厂商非标准的特性。转义语义使得我们可以访问与本地程序相同的SQL特性集,同时保持应用的可移植性。

应用通过使用Connection接口来设置事务属性和创建Statement, PreparedStatementCallableStatement. 这些statement被用来执行SQL语句和检索结果。ResultSet接口封装了SQL查询的结果。语句也可以批处理,这样应用可以通过一次单元执行提交对数据源的多次更新。

RowSet接口扩展了ResultSet接口。它提供了一个比标准结果集功能更多的表数据容器。RowSet对象是Java Beans组件,它可以在中断数据库连接的情况下操纵数据。例如,一个RowSet实现可以被序列化从而传送到网络上,这对于吞吐量小的客户端尤为有用,因为这可以省去加载JDBC驱动和建立JDBC连接的开销。RowSet还可以使用定制的阅读器(Reader)来访问表格数据(不仅仅是关系数据库的数据)。甚者,RowSet对象可以在中断数据库连接的情况下更新数据,并在连接正常时通过一个定制的书写器(Writer)将更新写入数据源。

4.2.1 SQL高级数据类型的支持

JDBC类库定义了SQL数据类型到JDBC数据类型的标准映射。映射也包含了对SQL2003高级数据类型如BLOBCLOBARRAYREFSTRUCTDISTINCT的支持。JDBC驱动也可以实现多个用户自定义类型(UDTs,user-defined types)的映射,在这里,每个UDT映射到Java中的一个类。

JDBC类库也提供对外部数据的支持,例如数据源外部的一个文件。

========================================

4.3 两层模型

两层模型将功能分配到客户端和服务器端,如图4-1.

twotier.gif

FIGURE 4-1 两层模型

客户端包含了应用和一个或多个JDBC驱动,这些应用负责下列内容:

* 表示逻辑

* 业务逻辑

* 对多语句事务(multiple-statement transactions)或分布式事务的管理

* 资源管理

在这个模型中,应用直接跟JDBC驱动打交道,包括建立和管理物理连接,以及处理底层数据源的相关细节。应用可以通过对数据源实现的了解来使用它的非标准特性或者提升性能。

模型的缺点:

* 将表示逻辑、业务逻辑和基础设施、系统级别的功能混淆在一起,不利于维护。

* 由于被绑定到特定的数据库,应用很难被移植。需要连接到多个数据库的应用要注意各个厂商实现的区别。

* 缺少可伸缩性。典型地,应用将从始至终占有一个或多个物理连接,缺少对并发应用的支持。在这个模型中,性能、可伸缩性和可靠性问题都是由JDBC驱动和底层数据源处理的。如果应用要跟多个驱动打交道,它需要注意每个驱动/数据源对是怎么处理这些问题的。

======================================================

4.4 三层模型

三层模型引入了中间层服务器来管理业务逻辑和基础结构,如图4-2.

threetier.gif

FIGURE 4-2 三层模型

这个架构为企业级应用提供了更好的性能、可伸缩性和可靠性。功能划分如下:

1.客户端 --- 只负责表示逻辑,处理人机交互。Java应用程序、网页浏览器和PDA等都是典型的客户端。客户端与中间层应用交互,它不需要了解底层的基础结构和数据源实现。

2.中间层服务器 --- 中间层包含:

* 一些应用程序。这些应用负责跟客户端打交道和实现业务逻辑。如果应用包含与数据源的交互,它应该使用高层抽象,例如DataSource对象和逻辑连接,而不是底层的驱动程序类库。

* 一个应用服务器。提供支持大部分应用的基础结构。这可能包含管理和池化物理连接、管理事务和掩盖不同JDBC驱动的细节。最后一点使得应用更容易被移植。应用服务器可以使用J2EE服务器。它应该直接和JDBC驱动交互和提供高层应用使用的功能抽象。

* 一个或多个JDBC驱动。提供与底层数据源的连接,每个驱动使用底层数据源支持的特性来实现标准JDBC类库。驱动层需要掩盖SQL2003标准和底层数据源语言的不同。如果数据源不是一个关系型数据库管理系统(DBMS),那么驱动要实现应用服务器使用的关系层。

3.底层数据源 --- 存放数据的层。包含关系型数据库管理系统(relational DBMS),遗留文件系统,面向对象的DBMS,数据仓库,报表或者其他包装和表示数据的方式,只要有对应的支持JDBC类库的驱动。

===================================================

4.5 J2EE平台中的JDBC

J2EE组件,例如JSPServletsEJB,经常需要利用JDBC类库访问关系型数据。当在J2EE组件里使用JDBC类库时,容器可能帮你管理事务和数据源(译者注:Container Managed Persistence,容器管理持久性)。这样,J2EE组件开发者就不直接使用JDBC类库的事务和数据源管理功能。详情请见J2EE平台规范。

posted @ 2005-09-30 20:08 罗明 阅读(89) | 评论 (0)编辑 收藏
 
JDBC 4.0 规范 - 第四章 - 概述(建立连接、执行SQL、模型比较、JDBC in J2EE)(续) - 译文

=====================================================
概述

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 --- 提供可以使用在分布式事务中的连接。

======================================================
4.2 执行SQL语句和操纵结果
    连接建立后,我们可以使用JDBC类库对目标数据源进行查询和更新。JDBC类库提供了对大多数SQL2003通用特性的支持。由于各个厂商可能要支持不同的特性,JDBC类库提供了一个DatabaseMetadata接口。应用可以通过这个接口了解数据源是否支持某个特性。JDBC类库也定义了转义语义来支持特定厂商非标准的特性。转义语义使得我们可以访问与本地程序相同的SQL特性集,同时保持应用的可移植性。

    应用通过使用Connection接口来设置事务属性和创建Statement,PreparedStatement和CallableStatement. 这些statement被用来执行SQL语句和检索结果。ResultSet接口封装了SQL查询的结果。语句也可以批处理,这样应用可以通过一次单元执行提交对数据源的多次更新。

    RowSet接口扩展了ResultSet接口。它提供了一个比标准结果集功能更多的表数据容器。RowSet对象是Java Beans组件,它可以在中断数据库连接的情况下操纵数据。例如,一个RowSet实现可以被序列化从而传送到网络上,这对于吞吐量小的客户端尤为有用,因为这可以省去加载JDBC驱动和建立JDBC连接的开销。RowSet还可以使用定制的阅读器(Reader)来访问表格数据(不仅仅是关系数据库的数据)。甚者,RowSet对象可以在中断数据库连接的情况下更新数据,并在连接正常时通过一个定制的书写器(Writer)将更新写入数据源。

4.2.1 对SQL高级数据类型的支持
    JDBC类库定义了SQL数据类型到JDBC数据类型的标准映射。映射也包含了对SQL2003高级数据类型如BLOB,CLOB,ARRAY,REF,STRUCT和DISTINCT的支持。JDBC驱动也可以实现多个用户自定义类型(UDTs,user-defined types)的映射,在这里,每个UDT映射到Java中的一个类。

JDBC类库也提供对外部数据的支持,例如数据源外部的一个文件。

========================================
4.3 两层模型
    两层模型将功能分配到客户端和服务器端,如图4-1.
twotier.gif
               FIGURE 4-1 两层模型
    客户端包含了应用和一个或多个JDBC驱动,这些应用负责下列内容:
    * 表示逻辑
    * 业务逻辑
    * 对多语句事务(multiple-statement transactions)或分布式事务的管理
    * 资源管理

    在这个模型中,应用直接跟JDBC驱动打交道,包括建立和管理物理连接,以及处理底层数据源的相关细节。应用可以通过对数据源实现的了解来使用它的非标准特性或者提升性能。

    模型的缺点:
    * 将表示逻辑、业务逻辑和基础设施、系统级别的功能混淆在一起,不利于维护。
    * 由于被绑定到特定的数据库,应用很难被移植。需要连接到多个数据库的应用要注意各个厂商实现的区别。
    * 缺少可伸缩性。典型地,应用将从始至终占有一个或多个物理连接,缺少对并发应用的支持。在这个模型中,性能、可伸缩性和可靠性问题都是由JDBC驱动和底层数据源处理的。如果应用要跟多个驱动打交道,它需要注意每个驱动/数据源对是怎么处理这些问题的。

======================================================
4.4 三层模型
    三层模型引入了中间层服务器来管理业务逻辑和基础结构,如图4-2.
threetier.gif
                            FIGURE 4-2 三层模型
    这个架构为企业级应用提供了更好的性能、可伸缩性和可靠性。功能划分如下:
    1.客户端 --- 只负责表示逻辑,处理人机交互。Java应用程序、网页浏览器和PDA等都是典型的客户端。客户端与中间层应用交互,它不需要了解底层的基础结构和数据源实现。

    2.中间层服务器 --- 中间层包含:
       * 一些应用程序。这些应用负责跟客户端打交道和实现业务逻辑。如果应用包含与数据源的交互,它应该使用高层抽象,例如DataSource对象和逻辑连接,而不是底层的驱动程序类库。
       * 一个应用服务器。提供支持大部分应用的基础结构。这可能包含管理和池化物理连接、管理事务和掩盖不同JDBC驱动的细节。最后一点使得应用更容易被移植。应用服务器可以使用J2EE服务器。它应该直接和JDBC驱动交互和提供高层应用使用的功能抽象。
       * 一个或多个JDBC驱动。提供与底层数据源的连接,每个驱动使用底层数据源支持的特性来实现标准JDBC类库。驱动层需要掩盖SQL2003标准和底层数据源语言的不同。如果数据源不是一个关系型数据库管理系统(DBMS),那么驱动要实现应用服务器使用的关系层。

    3.底层数据源 --- 存放数据的层。包含关系型数据库管理系统(relational DBMS),遗留文件系统,面向对象的DBMS,数据仓库,报表或者其他包装和表示数据的方式,只要有对应的支持JDBC类库的驱动。

===================================================
4.5 J2EE平台中的JDBC
    J2EE组件,例如JSP,Servlets和EJB,经常需要利用JDBC类库访问关系型数据。当在J2EE组件里使用JDBC类库时,容器可能帮你管理事务和数据源(译者注:Container Managed Persistence,容器管理持久性)。这样,J2EE组件开发者就不直接使用JDBC类库的事务和数据源管理功能。详情请见J2EE平台规范。

posted @ 2005-09-30 13:22 罗明 阅读(1433) | 评论 (1)编辑 收藏
 
多谢ZHENGJY的提醒,争取加入Postgre中文小组ing
能够继续翻译下去,又不会重复别人的工作了。
posted @ 2005-09-28 19:20 罗明 阅读(82) | 评论 (0)编辑 收藏
 
多谢ZHENGJY的提醒,争取加入Postgre中文小组ing
能够继续翻译下去,又不会重复别人的工作了。
posted @ 2005-09-28 11:22 罗明 阅读(383) | 评论 (0)编辑 收藏
 
JDBC 4.0 Specification - 序言、介绍、目标、新特性摘要、概述 ( 译文 )

其它章节的翻译参见:

http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4%E8%AF%B4%E6%98%8E%E4%B9%A6

=================================================================

序言

这个文档巩固了下面几个规范的内容:

JDBC: JavaSQL类库”

JDBC 2.1 类库”

JDBC 2.0 标准扩展类库”

JDBC 3.0 规范”

文档介绍了JDBC 4.0 类库的新特征和一些增强的特征。文档根据不同特征划分章节,这样可以更方便了解JDBC 4.03.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.JEEJSE平台相处融洽

---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.增强了对BLOBCLOB的支持

Connection接口添加了生产BLOBCLOBNCLOB对象的方法。PreparedStatement接口添加了通过InputStream插入BLOB的方法和使用Reader插入CLOBNCLOB的方法。Blob, ClobNClob现在可以通过free方法释放资源。

6.SQL/XMLXML支持

SQL2003引入了用SQL表达XML数据的概念。一些类库被添加进来以支持应用对这些数据的访问。

7.包装器(Wrapper)模式

添加了解包JDBC实现的能力,使开发者可以利用在厂商实现中提供的非标准JDBC方法。

8.加强的SQLException

添加对JSE链式异常的支持。SQLException现在支持Iterable接口,所以我们可以在for-each循环里读取SQLExceptions。新添加了两类SQL异常:SQLTransientExceptionSQLNonTransientException。每个类都提供映射到普通SQLState类型值(译者注:SQLState)的子类。

9.连接管理

ConnectionStatement接口得到了增强,以利于对连接状态的跟踪,并增加在池环境中管理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。重载了setClobsetBlob方法。

---10.3 DatabaseMetaData

添加了下列方法:getRowIdLifetime, autoCommitFailureClosesAllResultSets, providesQueryObjectGenerator, getClientInfoProperties, supportsStoredFunctionsUsingCallSyntax. 重载了getSchemas方法。

---10.4 PreparedStatement

添加了下列方法:setRowId, setNString, setNCharacterStream, setSQLXML, isPoolable, setPoolable, setNClob。重载了setClobsetBlob方法。

---10.5 ResultSet

添加了下列方法:getHoldability, getRowId, updateRowID, getNClob, isClosed, updateNString, getSQLXML, updateSQLXML, updateNClob

---10.6 Statement

添加了isClosedgetResultSetHoldability方法。

---10.7 DataSource

添加了createQueryObject方法。

---10.8 PooledConnection

添加了addStatementEventListenerremoveStatementEventListener方法。

====================================================================

概览

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 --- 提供可以使用在分布式事务中的连接。

posted @ 2005-09-28 01:18 罗明 阅读(84) | 评论 (0)编辑 收藏
 
ft, 今天发现JDBC 4.0已经有PostgreSQL在翻译了
第一天找了很久都没找到,确定了才开始翻译的,结果今天又发现了,已经有若干高手在翻译了,http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4%E8%AF%B4%E6%98%8E%E4%B9%A6
我就不能再插手了,但英文版我还是要看完的,长长知识,ft~
posted @ 2005-09-27 23:57 罗明 阅读(70) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 上一页 6 7 8 9 10 11 12 13 14 下一页