Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

使用CachedRowSet实现数据库的断接

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  由于同时访问网站的用户数量可能非常巨大,从J2EE连接池创建CachedRowSet要比直接创建连接好得多。DataSourceName属性告诉CachedRowSet在JNDI命名空间的什么地方可以找到希望的连接。一旦调用了execute()方法,CachedRowSet就会从JNDI取得一个javax.sql.DataSource的实例。DataSource对象为提供一个到RowSet的JDBC连接。

  除了靠CachedRowSet获得一个连接外,还可以将一个现有的连接作为参数传递给execute()方法。清单3中的例子同清单2中一样也是从J2EE连接池获取连接,所不同的是,这次的JNDI查找是显式的:

  清单3:通过传递一个现有的连接进行初始化


<% 
  // get connection from pool 
  InitialContext ctx = new InitialContext(); 
  javax.sql.DataSource ds = 
(javax.sql.DataSource)ctx.lookup("Databases/ContactsDB/DataSource"); 
  java.sql.Connection con = ds.getConnection(); 
  Contacts.setCommand("SELECT name, telephone from Contacts"); 
  // supply the connection to the RowSet 
  Contacts.execute(con); 
%> 

  不同应用服务器的连接池JNDI查找名是不一样的。您可以参考您所使用的应用服务器的说明文档,以便给连接池一个合适的JNDI查找模式。

  在JSP中显示CachedRowSet 属性

  初始化CachedRowSet以后,就可以象java.sql.ResultSet对象一样使用它了。正如先前所指出的,CachedRowSet仅仅是java.sql.ResultSet接口的另外一个实现而已。您可以通过将游标放置在目标行而后使用getString()方法访问CachedRowSet属性(假设对应的数据类型是varchar)。每一种JDBC数据类型都有对应的get方法。如果您不清楚是什么数据类型,您可以使用getObject()来替代。通过索引号或原始的ResultSet指定列:


Contacts.getString(1); 

  如果您采用象清单1中的方法包含useBean标签的话,您就可以在您的页面的任何位置通过该标签的脚本ID访问CachedRowSet。下面就是如何使用HTML提交表单域显示一个CachedRowSet列的实例:


 <input type="text" 
 name="ContactName" 
 value="<%=Contacts.getString(1)%>"/> 

  为了获得属性,您可以显示CachedRowSet的其它信息,如当前行号:


Record <%=Contacts.getRow()%> of <%=Contacts.size()%> 

  对于显示CachedRowSet属性来说,Navigation也是很重要的。CachedRowSet支持ResultSet接口所声明的所有navigation命令。甚至包括诸如previous()、first()和last()等新的JDBC 2.0方法。

  目前使用的标准JDBC版本是JDBC 1.0,Sun并没有将其JDBC驱动器更新为2.0版本。但是,由于在客户端对数据进行了缓存,CachedRowSet为JDBC1.0提供了前向和后向的滚动能力。这个优越的特性可以让开发者从为记录浏览应用写自己的ResultSet 缓冲对象的困境中解放出来。要从您的JSP中进行导航,仅仅接受请求与响应的命令参数就可以了:


  // process navigation commands 
  if ( req.getParameter("next") != null ) { 
if (! Contacts.next() ) 
  Contacts.last(); 
  } else if ( req.getParameter("prev") != null) { 
if (! Contacts.previous()) 
  Contacts.first(); 
  } 

  每一个导航方法都根据处理的成功与否返回true或false。如果失败了,游标必须返回到有效的位置。可以通过提交按钮发送导航参数:


<input type="submit" name="next" value=">" /> 

  对CachedRowSet执行更新

  我最喜欢的CachedRowSet特性是它可以自动完成对数据库的更新操作。熟悉ASP和Microsoft ADO开发的人也许会对这个特性很感兴趣。CachedRowSet可以大大减少开发人员所书写的SQL语句数量,并且在一个操作中就可以完成联合更新。联合更新对只有有限的数据库连接并且可能在连接上产生瓶颈的WEB应用来说非常有用。对大多数CachedRowSet应用来说,您只需要提供初始的SQL查询语句。最少只需要CachedRowSet上的三个方法就可以实现一个更新操作,但这些方法必须按照指定的顺序进行调用。首先,假设游标定位在正确的位置, 调用ResultSet的一个更新方法。这依赖于示例数据库中的列类型,更新可能如下所示:


   Contacts.updateString(1, "new value"); 

  如果需要,您可以在RowSet中为需要的列重复上面的类似代码。

  然后,在移动游标位置之前,RowSet必须知道您是否希望提交对当前列的更改:


 Contacts.updateRow(); 

  上述代码并没有将更改发送到数据库,而是仅仅将更改缓存到RowSet的缓存区。当用户进行记录更新时,并不需要捆绑数据库连接。用户仅仅在需要将RowSet的所有更新提交给数据库时才需要连接。

  第三也是最后一步是调用acceptChanges(),它将所有的更改一起提交给数据库。还是假设您采用清单1中的方法创建的CachedRowSet,下面的代码会提交包括最后一次以前的所有更新操作:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页 1 23 4 下一页


上一篇:XML与Java技术   下一篇:建立独立于数据类型的JDBC应用

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
·Motorola微处理器bootloader分析与应用
·Fedora Core5 NFS服务器搭建过程介绍
·Linux系统:让内存不再泄漏的实用技巧
·新手看招 手把手教你安装VMware虚拟机
·“侵权事件” 红帽称微软企图干扰用户
·删除Linux后 如何找回Windows启动菜单
·菜鸟乐园 Linux中常见文件系统格式介绍
·Linux操作系统下IPTables配置方法详解
·实用技巧 Linux系统的经典使用技巧八则
·Linux系统文件优化及磁盘检查方法介绍
推荐文章
·PHP安全配置(转)
·linux下的dns设置详解
·Linux 核心--2.硬件基础
·在Linux桌面环境制作网页
·Linux架设DNS服务器之二
·Linux 指令篇:终端机管理--reset
·用PHP和MySQL构建一个数据库驱动的
·[网卡]网卡的安装思路(1)
精彩文章
·Shell 编程(1)
·ssh的用户登陆限制
·一个网上理财站点的设计(十七)
·[人物]KDE英雄(1):Claudiu Costin
·Linux操作系统内核启动参数详细解析
·读核日记(二)
·LINUX下声卡ALSA驱动安装方法
·Linux 指令篇:文件打印--lpd
·Linux下如何删除Windows分区
·模式设计与形式主义
·Linux 网管 123 --- 第10章. 升级 L
·关于EJB返回值的解决方案
·Linux 指令篇:日期时间排程--cal
·Linux 文件命令精通指南(上)
·Linux操作系统定时任务系统Cron入门
·Linux对ISA总线DMA的实现
·Tcl编程简介(六)之名字空间
·Linux 指令篇:编码压缩打包--compre
·Xwpe FAQ
·实现基于Linux操作系统的视频点播系
·XML和JSP的联手(2)
·如何从技术上选择中间件
·三种VPN解决方案的优点
·日志管理
·Linux 2.4 NAT HOWTO
·对象/关系映射--概述
Power by linux-cn.com 粤ICP备05006655号