当前位置: 首页 > article >正文

管理结果集、java7的RowSet 1.1

管理结果集

JDBC使用ResultSet 来封装执行查询得到的查询结果,然后通过移动ResultSet的记录指针来取出结果集的内容。除此之外,JDBC还允许通过ResultSet 来更新记录,并提供了ResultSetMetaData 来获得ResultSet对象的相关信息。
可以使用absolute()、 previous()、 afterLast()等方 法自由移动记录指针的ResultSet被称为可滚动的结果集
Java5以后默认打开的ResultSet就是可滚动的
以默认方式打开的ResultSet是不可更新的,如果希望创建可更新的ResultSet,则必须在创建Statement或PreparedStatement时传入额外的参数。Connection在创建Staterment 或PreparedStatement时还可额外传入如下两个参数:
1.resultSetType: 控制ResultSet的类型
2.resultSetConcurrency: 控制ResultSet的并发类型
可更新的结果集还需要满足如下两个条件:
1.所有数据都应该来自一个表
2.选出的数据集必须包含主键列
Blob列通常用于存储大文件如:图片或声音文件,他们必须使用特殊的方法来存储
所以将Blob数据插入数据库需要使用PreparedStatement,该对象有一个方法:setBinaryStream(int parameterIndex, InputStream x),该方法可以为指定参数传入二进制输入流,从而可以实现将Blob数据保存到数据库的功能。
当需要从ResultSet里取出Blob数据时,可以调用ResultSet的getBlob(int columnIndex)方法,该方法将返回一个Blob对象,Blob对象提供了getBinaryStream(方法来获取该Blob数据的输入流,也可以使用Blob对象提供的getBytes(方法直接取出该Blob对象封装的二进制数据。

使用ResultSetMetaData分析结果集
ResultSet里包含一个getMetaData(方法,该方法返回该ResultSet对应的ResultSetMetaData 对象。一旦获得了ResultSetMetaData对象,就可通过ResultSetMetaData提供的大量方法来返回ResultSet的描述信息。常用的方法有如下三个:
1.int getColumnCount():返回该ResultSet的列数量。
2.String getColumnName(int column):返回指定索引的列名。
3.int getColumnType(int column):返回指定索引的列类型。

java7的RowSet 1.1

RowSet继承了ResultSet 接口, RowSet接口下包含JdbcRowSet、CachedRowSet、FilteredRowSet、JoinRowSet和WebRowSet常用子接口。除了JdbcRowSet需要保持与数据库的连接之外,其余4个子接口都是离线的RowSet,无须保持与数据库的连接。
在这里插入图片描述
JdbcRowSetImpl 提供了如下常用构造器:
1.JdbcRowSetImpl0: 创建一- 个默认的JdbcRowSetImpl对象。
2.JdbcRowSetImpl(Connection conn): 以给定的Connection 对象作为数据库连接来创建JdbcRowSetImpl对象。
3.JdbcRowSetImpl(ResultSet rs):创建一个包装 ResultSet对象的JdbcRowSetImpl对象。
在这里插入图片描述

使用JdbcRowSetImpl坏处:
1.程序直接与JdbcRowSetImpl实现类耦合,不利于后期的升级、扩展。
2.JdbcRowSetImpl实现类不是一一个公开的API,未来可能被删除。
所以RowSet未广泛应用,Java7新增了RowSetProvider类和RowSetFactory 接口,其中RowSetProvider 负责创建RowSetFactory, 而RowSetFactory则提供了如下方法来创建RowSet实例:
1.CachedRowSet createCachedRowSet():创建一个默认的CachedRowSet。
2.FilteredRowSet createFilteredRowSet():创建一个默认的FilteredRowSet。
3.JdbcRowSet createJdbcRowSet():创建一个默认的JdbcRowSet。
4.JoinRowSet createJoinRowSet():创建一个默认的JoinRowSet。
5.WebRowSet createWebRowSet():创建-一个默认的WebRowSet。

通过使用RowSetFactory,就可以把应用程序与RowSet实现类分离开,避免直接使用JdbcRow SetImpl等非公开的API,也更有利于后期的升级、扩展。

离线RowSet
假设应用程序架构被分为两层:数据访问层和视图显示层,当应用程序在数据访问层查询得到ResultSet之后,对ResultSet的处理有如下两种常见方式:
1.使用迭代访问ResultSet 里的记录,并将这些记录转换成Java Bean,再将多个Java Bean封装成一个List集合,也就是完成“ResultSet->JavaBean集合”的转换。转换完成后可以关闭Connection等资源,然后将JavaBean集合传到视图显示层,视图显示层可以显示查询得到的数据。
2.直接将ResultSet传到视图显示层一这 要求当视图显示层显示数据时,底层Connection必须一直处于打开状态,否则ResultSet无法读取记录。
第一种安全,但编程复杂,第二种不安全

由于CachedRowSet 会将数据记录直接装载到内存中,因此如果SQL查询返回的记录过大,CachedRowSet将会占用大量的内存,在某些极端的情况下,它甚至会直接导致内存溢出。为了解决该问题,CachedRowSet 提供了分页功能。所谓分页功能就是一次只装载ResultSet 里的某几条记录,这样就可以避免CachedRowSet占用内存过大的问题。CachedRowSet提供了如下方法来控制分页:
1.populate(ResultSet rs, int startRow):使用给定的ResultSet 装填RowSet,从ResultSet 的第startRow条记录开始装填。
2.setPageSize(int pageSize): 设置CachedRowSet每次返回多少条记录。
3.previousPage(): 在底层ResultSet可用的情况下,让CachedRowSet读取上一页记录。
4.nextPage(): 在底层ResultSet可用的情况下,让CachedRowSet读取下一页记录。

http://www.lryc.cn/news/2415419.html

相关文章:

  • Visual C++ 6.0 ( VC 6 )带 SP6 中英文双语版 下载
  • 万能DOS启动盘制作全攻略!(软盘+光盘+U盘+硬盘+NTFS+……)
  • 推荐40个互联网知名博客
  • tp-link无线网卡linux下的驱动,Ubuntu14下安装无线网卡驱动(TP-LINK TL-WN823N)
  • 服务器系统2008 64,服务器主机server 2008 R2 操作系统漏洞
  • 【Turbo C 2.0系列】1. 系列工具介绍
  • WebEffect网页特效集锦系统
  • 了解 Cookie 和 Session:Web 开发中的身份验证机制
  • android 进程 application,将system_server进程配置成Android Application进程
  • 常用的ID网站
  • 关于newsbar和卓越的区别!!
  • 【Python秒杀脚本】淘宝 京东购物秒杀外挂,平台定时准点自动抢购,618薅羊毛全靠它!!
  • 【ToolChains】| CMake 技巧
  • [NOIP2009 提高组] 最优贸易
  • SQL连接MYSQL出现对象名无效_SQL对象名无效的解决方法
  • ASP.NET Core 初学者指南 - 基于 yoyomooc 的开源项目
  • AVI与NSX-T集成实验
  • Drupal 模块开发基本教程(二)
  • VINS-Mono代码阅读笔记(十四):posegraph的存储和加载
  • struts2.0(一)
  • 虚拟机 VMware Workstation-安装详细步骤
  • 修改grub 启动项
  • ERP选型之选型九步
  • 虚拟机VirtualBox安装MAC OS 10.12图文教程
  • VMware 虚拟机里连不上网的三种解决方案
  • windows提示“你可能是盗版软件受害者”的解决方法
  • 华创e路航固件_华创e路航地图升级工具 v1.0 官方版(图文)
  • qq音乐登录页面的html代码,musicQQ音乐协议登录源码
  • 服务器如何搭建
  • 区块链与大数据,打造智能经济(读书笔记)——井底望天