JDBC中使用RowSet包装结果集
背景
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包装结果集相关推荐
- JDBC中驱动加载的过程分析
JDBC中驱动加载的过程分析 作者:kenty 来源:博客园 发布时间:2007-08-20 15:01 阅读:1100 次 原文链接 [收藏] 本篇从java.sql.Driver ...
- java rowset,cachedrowset 如何使用Java中的RowSet
调用CachedRowSetImpl类时,为什么会出现这种错误有些人就是这样,哪怕只见过一次,终生都无法忘怀. Access restriction: The type CachedRowSetImp ...
- 03-JDBC学习手册:JDBC中几个重要接口和异常处理
一.JDBC中几个重要接口 1 Statement --- SQL 语句执行接口 Statement 接口代表了一个数据库的状态,在向数据库发送相应的 SQL 语句 时,都需要创建 Stateme ...
- java result元素_Java JDBC 中获取 ResultSet 的大小
当我们执行完一条Sql语句,获取到一个 ResultSet 对象后,有时我们需要立即知道到底返回了多少个元素,但是 ResultSet 并没有提供一个 size() 方法 or length 的属性, ...
- jdbc 批量insert_037 深入JDBC中PreparedStatement对象使用
1. 什么是SQL注入 (1) 什么是SQL注入? 所谓SQL注入,就是通过把含有SQL语句片段的参数插入到需要执行的SQL语句中,最终达到欺骗数据库服务器执行恶意操作的SQL命令. (2) 如何解决 ...
- JDBC中executeQuery、executeUpdate和execute之间的区别
JDBC中Statement 接口提供了三种执行 SQL 语句的方法: executeQuery executeUpdate execute 使用哪一个方法由 SQL 语句所产生的内容决定. 1&g ...
- 不是操作系统的是JAVA_在Jdbc中可以调用数据库的存储过程的接口是( )。
[多选题]下面属于AWT事件的高级事件的是(). [其它]1.1000字的故事梗概.是整个电视剧的总体梗概. 2.列出每条情节线的事件 3.核心人物的人物小传,每个人物500字 4.以Word附件的形 ...
- JDBC中的SQL注入
1.JDBC中sql注入 1.1 JDBC JDBC的概念:JDBC是sun公司(已被Oracle收购)制定一系列接口标准,由不同数据库厂商(Oracle.MySQL等)实现接口方法并封装成驱动文件, ...
- 关于JDBC中的 PreparedStatement 的使用讲解
**关于JDBC中的 PreparedStatement 的使用讲解@**TOC 文章转载于博客 https://www.cnblogs.com/ysw-go/p/5459330.html 如有侵权, ...
最新文章
- AlphaGo制胜绝招:蒙特卡洛树搜索入门指南
- 【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
- java.lang.IllegalStateException: 启动子级时出错
- 第一次在Linux系统上操作mysql数据库,看完这篇轻松应对
- doctype是什么?
- block作用域与流程控制(块block、if-else、while、do-while、for-foreach、switch-case、break、continue、label)
- 《剑指offer》孩子们的游戏---约瑟夫问题
- Android测量图像中物体大小,android – 加载图像后测量ImageView
- 电气专业学python吗_985大学毕业起薪最高的五个专业,计算机、金融、电气上榜!...
- DML数据操作语言练习
- 二维列表的len_基于Voronoi二维多晶体的衍生脚本操作
- Unity3D中关于场景销毁时事件调用顺序的一点记录
- 2014-07-24 .NET实现微信公众号的消息回复与自定义菜单
- mysql+centos7+主从复制
- 金庸的武侠世界和SAP的江湖
- craps赌博游戏的python解法
- 蓝彩影视V73-安卓/苹果/网页/TV端/有教程
- axure rp pro 9.0授权密钥
- 一站到底题库 mysql_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
- linux netstat未找到命令,运行netstat,提示未找到这个命令
热门文章
- informatica中元数据管理
- 2016.04.29-2016.05.05这周工作时间和内容
- 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系
- android button的selector
- 丢失MySQL root 密码?
- Centos搭建SVN服务器及配置文件
- MPLS ×××配置
- ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...
- Windows系统常用技巧总结
- 转换和编辑的sony的MTS硬盘摄像机格式文件。