背景

C#中有了DataSet,可以把底层数据读取到内存中进行离线操作。操作完成再同步到底层数据源。Java中也提供了类似的功能——RowSet。

和ResultSet相比,RowSet默认是可以滚动、可更新、可序列化的结果集合,而且作为Javabean使用。并支持离线操作,降低了数据库的负载。

RowSetProvider负责创建RowSetFactory,而RowSetFactory则提供了如下方法类创建RowSet实例:

1、CacheRowSet createCachedRowSet();创建一个默认的CachedRowSet

2、FilteredRowSet createFilteredRowSet();创建一个默认的FilteredRowSet

3、JdbcRowSet createJdbcRowSet();创建一个默认的JdbcRowSet

4、JoinRowSet createJoinRowSet ();创建一个默认的JoinRowSet

5、WebRowSet createWebRowSet ();创建一个默认的WebRowSet

为了让RowSet能抓取到数据,需要为RowSet设置数据库Url、用户名、密码等信息。常用方法如下:

1、setUrl(String url):设置URL

2、setUserName(String Name):设置用户名

3、setPassword(String password):设置密码

4、setCommand(String sql):设置SQL语句

5、execute():执行查询


示例代码如下图所示:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;public class RowSetUtil {private String url;private String user;private String password;public RowSetUtil(String url,String user,String password){this.url = url;this.user = user;this.password = password;}static{try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 查询SQL并修改指定结果* @param sql* @throws SQLException*/public void queryResult(String sql)throws SQLException{RowSetFactory factory = RowSetProvider.newFactory();//使用RowSetProvider创建newFactorytry(JdbcRowSet jdbcRowSet = factory.createJdbcRowSet())//使用factory创建JdbcRowSet实例{jdbcRowSet.setUrl(this.url);jdbcRowSet.setUsername(this.user);jdbcRowSet.setPassword(this.password);jdbcRowSet.setCommand(sql);try {jdbcRowSet.execute();//执行操作} catch (Exception e) {// TODO: handle exceptione.printStackTrace();throw new SQLException();}while(jdbcRowSet.next()){               System.out.println("id=" + jdbcRowSet.getLong(1) + ";productName=" + jdbcRowSet.getString(1));if (jdbcRowSet.getLong("Id") == 218) {jdbcRowSet.updateString("ProductName", "测试");jdbcRowSet.updateRow();}}}}/*** 离线RowSet模式* @param sql* @throws SQLException*/public void queryResultOffLine(String sql) throws SQLException{try(Connection connection = DriverManager.getConnection(this.url, this.user, this.password);Statement statement = connection.createStatement();ResultSet rSet = statement.executeQuery(sql);){RowSetFactory factory = RowSetProvider.newFactory();CachedRowSet cachedRowSet = factory.createCachedRowSet();cachedRowSet.populate(rSet);//使用cachedRowSet装填cachedRowSetResultSetMetaData rSetMetaData = cachedRowSet.getMetaData();//转化为rSetMetaData才能进行获取列名信息int colCount = rSetMetaData.getColumnCount();for (int i = 1; i <= colCount; i++) {System.out.println("第" + i + "列列名是" + rSetMetaData.getColumnName(i) + ";类型是" + rSetMetaData.getColumnTypeName(i));}}}
}

JDBC中使用RowSet包装结果集相关推荐

  1. JDBC中驱动加载的过程分析

    JDBC中驱动加载的过程分析 作者:kenty  来源:博客园  发布时间:2007-08-20 15:01  阅读:1100 次  原文链接   [收藏]    本篇从java.sql.Driver ...

  2. java rowset,cachedrowset 如何使用Java中的RowSet

    调用CachedRowSetImpl类时,为什么会出现这种错误有些人就是这样,哪怕只见过一次,终生都无法忘怀. Access restriction: The type CachedRowSetImp ...

  3. 03-JDBC学习手册:JDBC中几个重要接口和异常处理

    一.JDBC中几个重要接口 1  Statement --- SQL  语句执行接口 Statement 接口代表了一个数据库的状态,在向数据库发送相应的 SQL 语句 时,都需要创建 Stateme ...

  4. java result元素_Java JDBC 中获取 ResultSet 的大小

    当我们执行完一条Sql语句,获取到一个 ResultSet 对象后,有时我们需要立即知道到底返回了多少个元素,但是 ResultSet 并没有提供一个 size() 方法 or length 的属性, ...

  5. jdbc 批量insert_037 深入JDBC中PreparedStatement对象使用

    1. 什么是SQL注入 (1) 什么是SQL注入? 所谓SQL注入,就是通过把含有SQL语句片段的参数插入到需要执行的SQL语句中,最终达到欺骗数据库服务器执行恶意操作的SQL命令. (2) 如何解决 ...

  6. JDBC中executeQuery、executeUpdate和execute之间的区别

    JDBC中Statement 接口提供了三种执行 SQL 语句的方法: executeQuery executeUpdate  execute 使用哪一个方法由 SQL 语句所产生的内容决定. 1&g ...

  7. 不是操作系统的是JAVA_在Jdbc中可以调用数据库的存储过程的接口是( )。

    [多选题]下面属于AWT事件的高级事件的是(). [其它]1.1000字的故事梗概.是整个电视剧的总体梗概. 2.列出每条情节线的事件 3.核心人物的人物小传,每个人物500字 4.以Word附件的形 ...

  8. JDBC中的SQL注入

    1.JDBC中sql注入 1.1 JDBC JDBC的概念:JDBC是sun公司(已被Oracle收购)制定一系列接口标准,由不同数据库厂商(Oracle.MySQL等)实现接口方法并封装成驱动文件, ...

  9. 关于JDBC中的 PreparedStatement 的使用讲解

    **关于JDBC中的 PreparedStatement 的使用讲解@**TOC 文章转载于博客 https://www.cnblogs.com/ysw-go/p/5459330.html 如有侵权, ...

最新文章

  1. AlphaGo制胜绝招:蒙特卡洛树搜索入门指南
  2. 【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
  3. java.lang.IllegalStateException: 启动子级时出错
  4. 第一次在Linux系统上操作mysql数据库,看完这篇轻松应对
  5. doctype是什么?
  6. block作用域与流程控制(块block、if-else、while、do-while、for-foreach、switch-case、break、continue、label)
  7. 《剑指offer》孩子们的游戏---约瑟夫问题
  8. Android测量图像中物体大小,android – 加载图像后测量ImageView
  9. 电气专业学python吗_985大学毕业起薪最高的五个专业,计算机、金融、电气上榜!...
  10. DML数据操作语言练习
  11. 二维列表的len_基于Voronoi二维多晶体的衍生脚本操作
  12. Unity3D中关于场景销毁时事件调用顺序的一点记录
  13. 2014-07-24 .NET实现微信公众号的消息回复与自定义菜单
  14. mysql+centos7+主从复制
  15. 金庸的武侠世界和SAP的江湖
  16. craps赌博游戏的python解法
  17. 蓝彩影视V73-安卓/苹果/网页/TV端/有教程
  18. axure rp pro 9.0授权密钥
  19. 一站到底题库 mysql_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
  20. linux netstat未找到命令,运行netstat,提示未找到这个命令

热门文章

  1. informatica中元数据管理
  2. 2016.04.29-2016.05.05这周工作时间和内容
  3. 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系
  4. android button的selector
  5. 丢失MySQL root 密码?
  6. Centos搭建SVN服务器及配置文件
  7. MPLS ×××配置
  8. ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...
  9. Windows系统常用技巧总结
  10. 转换和编辑的sony的MTS硬盘摄像机格式文件。