帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE1.4新特性之JDBC3.0的新特性
作者:佚名 发布时间:2005-04-02 来源:不详
 
  1、JDBC3.0规范中数据库连接池框架


  JDBC3.0规范中通过提
连接池的实现,而连接池的
不同角色的开发人员共同实
供了一个支持数据库连接池的框
具体实现JDBC 3.0规范并没有做
现数据库连接池。
架,这个框架仅仅规定了如何支持
相关的规定。通过这个框架可以让


  通过JDBC3.0规范可以
Application Server级。在
JDBC Drvier的开发人员来
也必须对数据库连接池进行
定数据库厂商的JDBC Drive
池的实现(但是现在大多数
),其中特定数据库厂商的
Server厂商提供数据库连接
知道具体数据库连接池的实现可
JDBC Driver级的实现中任何相
具体实现,即JDBC Driver既需
具体实现。而在Application Se
r开发人员和Application Serve
Application Server厂商实现的
JDBC Driver提供数据库连接池
池的具体实现。
以分为JDBC Driver级和
关的工作均由特定数据库厂商的
要提供对数据库连接池的支持同时
rver级中数据库连接池的实现中特
r开发人员来共同实现数据库连接
连接池的机制和规范中提到有差异
的支持而特定的Application


  JDBC3.0规范规定了如下的类和接口来支持数据库连接池的实现。             

  javax.sql.ConnectionEvent                           
  javax.sql.ConnectionPoolDataSource         
  javax.sql.PooledConnection                         
  javax.sql.ConnectionEventListener            
                                                                               
  其中除javax.sql.Conn
ectionEvent是类,其它的均为
接口。

  

  

  图1 JDBC3.0连接池框架的关系图


  通过此图可以大概的了解相关接口在一个典型的三层环境中应用程序的位置。         

  2、检索自动产生的关键字


  为了解决对获取自动产生的或自动增
这种值变得很轻松。要确定任何所产生的
中指定一个可选的标记,表示您有兴趣获
Statement.RETURN_GENERATED_KEYS,也
语句后,所产生的关键字的值就会通过从
索 ResultSet 而获得,ResultSet 包含
的作者并返回对应的自动产生的关键字。
加的关键字的值的需求,JDBC 3.0 API 现在将获取
关键字的值,只要简单地在语句的 execute() 方法
取产生的值。您感兴趣的程度可以是
可以是 Statement.NO_GENERATED_KEYS。在执行这条
Statement 的实例方法 getGeneratedKeys() 来检
了每个所产生的关键字的列,下面的示例创建一个新


  ……                                                                          
  Statement stmt = conn.createStat
ement();
  // Obtain the genera
ted key that results from th
e query.
  stmt.executeUpdate("INSERT INTO
authors " +
  "(first_name, last_name) " +                     
  "VALUES (‘Ghq’, ‘Wxl’)",                             
  Statement.RETURN_GENERATED_KEYS);           

  ResultSet rs = stmt.
getGeneratedKeys();
  if ( rs.next() ) {                                         
  // Retrieve the auto generated key(s).
  int key = rs.getInt();                                 
  }                                                                            
  ……                                                                          
                                                                               
  3、返回多重结果


  JDBC 2 规范的一个局
。作为 JDBC 3.0 规范中改
ResultSets。然而,重要的
的 ResultSet。所以,要支
getMoreResults() 方法。
指定前一次打开的 ResultS
限是,在任意时刻,返回多重结
变的一个部分,规范将允许 Sta
是 execute() 方法仍然会关闭
持多重打开的结果,Statement
新式的方法会做一个整数标记,
et 的行为。接口将按如下所示
果的语句只能打开一个 ResultSet
tement 接口支持多重打开的
任何以前 execute() 调用中打开
接口就要加上一个重载的
在 getResultSet() 方法被调用时
定义标记:

  CLOSE_ALL_RESULTS:
都将被关闭。
当调用 getMoreResults() 时,

所有以前打开的 ResultSet 对象


  CLOSE_CURRENT_RESULT:当调用 get
闭。
MoreResults() 时,当前的 ResultSet 对象将被关


  KEEP_CURRENT_RESULT:当调用 getM
关闭。
oreResults() 时,当前的 ResultSet 对象将不会被


  下面展示的是一个处理多重打开结果的示例。                                     

  ……                                                                         
  String procCall;                                             
  // Set the value of
procCall to call a stored pr
ocedure.
  // …                                                                     
  CallableStatement cs
tmt = connection.prepareCall
(procCall);
  int retval = cstmt.execute();                   
  if (retval == false) {                                 
  // The statement returned an upd
ate count, so handle it.
  // …                                                                     
  } else { // ResultSet                                   
  ResultSet rs1 = cstmt.getResultSet();   
  // …                                                                     
  retval = cstmt.getMo
reResults(Statement.KEEP_CUR
RENT_RESULT);
  if (retval == true) {                                   
  ResultSet rs2 = cstmt.getResultSet();   

  // Both ResultSets a
re open and ready for use.
  rs2.next();                                                       
  rs1.next();                                                       
  // …                                                                     
   }                                                                         
  }                                                                            
  ……                                                                          
                                                                               
  4、在事务中使用 Savepoint


  也许在 JDBC 3.0 中最令人兴奋的附
开发人员可以控制对数据的并发访问,从
时候需要的是对事务多一点的控制,而不
JDBC 3.0 下,可以通过 Savepoint 获得
逻辑断点,以控制有多少事务需要回滚。
加特点就是 Savepoint 了。JDBC 2 中的事务支持让
而保证持续数据总是保持一致的状态。可惜的是,有
是在当前的事务中简单地对每一个改变进行回滚。在
这种控制。Savepoint 接口允许您将事务分割为各个
下图3 将说明如何在事务中运用 Savepoint。

  

  

  图2 Savepoint 的直观表示

                                                                               
  你或许不是经常需要使
用,那就是您需要作一系列
哪一部分。下面的代码示例
用 Savepoint。然而,在一种普
的改变,但是在知道所有的结果
说明了如何使用 Savepoint 接
遍的情况下 Savepoint 会发挥作
之前不能确定应该保留这些改变的
口。

  ......                                                                  
  conn.setAutoCommit(false);                         
  // Set a conservative transactio
n isolation level.
  conn.setTransactionI
solation(Connection.TRANSACT
ION_SERIALIZABLE);

  Statement stmt = con
n.createStatement();
  int rows = stmt.executeUpdate( "
INSERT INTO authors " +
  " (first_name, last_name) VALUES " +     
  " ('Ghq', 'Wxl')");                                       
  // Set a named savepoint.                           
  Savepoint svpt = con
n.setSavepoint("NewAuthor");

  // …                                                                     
  rows = stmt.executeUpdate( "UPDA
TE authors set type = 'fiction' " +
  "WHERE last_name = 'Wxl'");                       
  // …                                                                     
  conn.rollback(svpt);                                     
  // …                                                                     
  // The author has been added, bu
t not updated.
  conn.commit();                                                 
  ......                                                                  
                                                                               
  5、其他的特性


  1)元数据 API


  元数据 API 已经得到
构,一种新的 ParameterMe
性。
更新,DatabaseMetaData 接口
taData 接口可以描述 Prepared

现在可以检索 SQL 类型的层次结
Statement 对象中参数的类型和属


  2)CallableStatements 中已命名的参数


  在 JDBC 3.0 之前,设
。 CallableStatement 接
置一个存储过程中的一个参数要
口已经被更新了,现在您可以用
指定它的索引值,而不是它的名称
名称来指定参数。

  3)数据类型的改变


  JDBC 所支持的数据类型作了几个改变,其中之一是增加了两种新的数据类型。   

  为了便于修改 CLOB(Character Lar
OBject,二进制巨对象)和 REF(SQL 结
下来的是,因为我们现在能够更新这些数
支持对这些数据类型的列的更新,也包括
java.sql.Types.DATALINK 和 java.sql.
类型。DATALINK 提供对外部资源的访问
同的,只是增加了在语义上的含义。DATA
ResultSet 的一个实例中检索到的,而 B
ge OBject,字符型巨对象)、BLOB(Binary Large
构)类型的值,同名的数据类型接口都被更新了。接
据类型的值,所以 ResultSet 接口也被修改了,以
对 ARRAY 类型的更新。增加的两种新的数据类型是
Types.BOOLEAN。新增的数据类型指的是同名的 SQL
或 URL,而 BOOLEAN 类型在逻辑上和 BIT 类型是等
LINK 列值是通过使用新的 getURL() 方法从
OOLEAN 类型是通过使用 getBoolean() 来检索的。


  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·J2EE1.4新特性之Servlet2.4新特性  (2005-04-02)
 ·J2EE 的四层模型  (2005-04-02)
 ·J2EE 的结构  (2005-04-02)
 ·J2EE的核心API与组件  (2005-04-02)
 ·XML和J2EE的组合技术  (2005-04-02)
 ·J2EE的未来  (2005-04-02)
 ·中国软件市场呼吁更多中高级J2EE  (2005-04-02)
 ·J2EE1.4的多层Web框架技术  (2005-04-02)
 ·解析J2EE型式的应用(上) (1)  (2005-04-02)
 ·J2EE宠物商店 (1)  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统