RowSet概念

在C#中,提供了一个DataSet,可以把数据库的数据放在内存中进行离线操作(读写),操作完成之后再同步到数据库中去,Java中则提供了类似的功能RowSet.

RowSet接口继承自ResultSet接口。与ResultSet相比,RowSet默认是可滚动、可更新、可序列化的结果集,可以作为JavaBean来方便地在网络上传输,用于同步两端数据。对于离线RowSet而言,

程序从创建RowSet时就已经把数据load进内存,因此可以更好地利用内存性能,降低数据库服务器的负载,提高程序性能。

RowSet接口下包含了JdbcRowSet, CachedRowSet, FilteredRowSet, JoinRowSet, WebRowSet,除了JdbcRowSet之外,后面四个都是离线RowSet,它们之间的继承关系如下,

RowSetFactory

在JDK1.6及以前的版本中,如果要使用JdbcRowSet,则必须使用JdbcRowSetImpl的构造器来构造对象,但是在编译的时候会有警告,因此JdbcRowSetImpl是内部专用的API,在未来版本可能会删除。这种获取JdbcRowSet的方式是不推荐的,因为使用内部API,在将来的版本中可能不兼容,而且这样的程序直接与具体的实现类JdbcRowSetImpl耦合,不利于维护和升级。

在JDK1.7中,这个问题得到了改善。JDK1.7引入了RowSetFactory和RowSetProvider接口,其中RowSetProvider负责创建RowSetFactory,而RowSetFactory则可以通过以下方法创建RowSet实例,

createCachedRowSet()

createFilteredRowSet()

createJdbcRowSet()

createJoinRowSet()

createWebRowSet()

通过RowSetFactory,程序就可以与RowSet的实现类分离,避免了直接使用具体的实现类JdbcRowSetImpl。

创建对象时可以传入ResultSet实例填充RowSet,也可以在创建JdbcRowSet实例之后通过execute(sql)方法得到数据填充RowSet,

下面演示使用RowSetFactory和RowSetProvider接口获取RowSet实例并使用的方法,

1 packagedb;2

3 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.IOException;6 importjava.sql.Connection;7 importjava.sql.DriverManager;8 importjava.sql.SQLException;9 importjava.util.Properties;10

11 importjavax.sql.rowset.JdbcRowSet;12 importjavax.sql.rowset.RowSetFactory;13 importjavax.sql.rowset.RowSetProvider;14

15

16 public classRowSetFactoryTest {17 privateString driver;18 privateString url;19 privateString user;20 privateString pass;21 public void initParam(String paramFile) throwsFileNotFoundException, IOException, ClassNotFoundException {22 //用Properties类加载属性文件

23 Properties prop = newProperties();24 prop.load(newFileInputStream(paramFile));25 driver = prop.getProperty("driver");26 url = prop.getProperty("url");27 user = prop.getProperty("user");28 pass = prop.getProperty("pass");29 Class.forName(driver);30 }31

32 public void update(String sql) throwsSQLException {33 RowSetFactory factory =RowSetProvider.newFactory();34

35 try(36 //使用RowSet的execute方式返回数据,则不再需DriverManager连接数据库了37 //Connection conn = DriverManager.getConnection(url, user, pass);

38 /*

39 * for JDK1.640 * JdbcRowSet jdbcRs = new JdbcRowSetImpl(conn);41 */

42 //for JDK 1.7

43 JdbcRowSet jdbcRs =factory.createJdbcRowSet();44 ) {45 jdbcRs.setUrl(url);46 jdbcRs.setUsername(user);47 jdbcRs.setPassword(pass);48 jdbcRs.setCommand(sql);49 jdbcRs.execute();50

51 jdbcRs.afterLast();52 //向前滚动结果集

53 while(jdbcRs.previous()) {54 System.out.println(jdbcRs.getInt(1)+"\t"+jdbcRs.getString(2)+"\t"+jdbcRs.getString(3));55

56 if (jdbcRs.getInt("jdbc_id") == 3) {57 //修改指定行记录,因为 JdbcRowSet 继承自 ResultSet, 所以修改记录的方式也一样

58 jdbcRs.updateString("jdbc_name", "小明");59 jdbcRs.updateRow();60 System.out.println("修改成功: ");61 System.out.println(+jdbcRs.getInt(1)+"\t"+jdbcRs.getString(2)+"\t"+jdbcRs.getString(3));62 }63

64 }65 }66 }67

68 public static void main(String[] args) throwsFileNotFoundException, ClassNotFoundException, IOException, SQLException {69 RowSetFactoryTest jt = newRowSetFactoryTest();70 jt.initParam("mysql.ini");71 jt.update("select * from jdbc_test");72 }73 }

执行上面程序会发现第3行被修改了,需要注意的是JdbcRowSet并不是离线的RowSet,因此需要在数据库保持连接的情况下才能修改数据

因为JdbcRowSet接口继承自ResultSet,所以修改数据的方法跟ResultSet一样的。 程序执行结果如下,

1 27学生名27 学生名282 26学生名26 学生名273 25学生名25 学生名264 24学生名24 学生名255 23学生名23 学生名246 22学生名22 学生名237 21学生名21 学生名228 20学生名20 学生名219 19学生名19 学生名2010 18学生名18 学生名1911 17学生名17 学生名1812 16学生名16 学生名1713 15学生名15 学生名1614 14学生名14 学生名1515 13学生名13 学生名1416 12学生名12 学生名1317 11学生名11 学生名1218 10学生名10 学生名1119 9学生名9 学生名1020 8学生名8 学生名921 7学生名7 学生名822 6学生名6 学生名723 5学生名5 学生名624 4学生名4 学生名525 3小明 小强26 修改成功:27 3小明 小强28 2学生名2 学生名329 1 学生名1 学生名2

View Code

java jdbc rowset_JAVA基础知识之JDBC——RowSet相关推荐

  1. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  2. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  3. Java核心技术卷一基础知识第10版demo实例

    Java核心技术卷一基础知识第10版demo实例 第三章 JAVA的基本程序设计结构 3.7输入与输出 3.7.1读取输入 3.8控制流程 3.8.3循环 3.10数组 3.10.6多维数组 第四章 ...

  4. java的一些基础知识(引用BlogJava 落花飞雪)

     java的一些基础知识(引用BlogJava 落花飞雪) <Practical Java>笔记 1. 声明是什么? String s = "Hello world!" ...

  5. 黑马程序员 一、java 概述与基础知识

    获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使 ...

  6. java to go 基础知识与区别入土指南

    java to go 基础知识与区别入土指南 文章目录 java to go 基础知识与区别入土指南 @[toc] 基础篇 关于基础类型 关于复合数据类型 关于切片 关于Map 关于sync.map ...

  7. 【Java】【基础知识】【Java的基本使用】

    [Java][基础知识][Java的基本使用] 基于jdk8 仅个人理解,或有疏漏 基于 java疯狂讲义 第三版和第四版 java核心技术卷一 第十版和第十一版 廖雪峰java课程 一.基本数据与结 ...

  8. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  9. java学习笔记-基础知识-2023.3.29

    学习网站:https://www.sxt.cn/Java_jQuery_in_action/History_Direction.html 刷题网站 牛客网专题-spring java sql 第一章 ...

最新文章

  1. spring官方文档阅读笔记
  2. 依赖第三方库时出现的问题:Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16
  3. nginx 日志配置_Nginx记录日志到systemd journal
  4. Java多线程(四)——多线程数据隔离与共享
  5. 机器学习面试-数学基础
  6. Hi3518ev200使用HiTool下载程序
  7. 小学三年级英语听力测试软件,人教小学三年级英语(下)期末检测题+听力测试...
  8. 发卡网源码附企业发卡网源码搭建安装教程
  9. 南京邮电大学-IP网络技术重难点突破(江凌云老师课程)
  10. 安装VS2003 2005错误
  11. 一文带你读懂 Java Agent 内存马
  12. 使用geronimo-javamail_1.4发送邮件的有关说明
  13. NFT市场如何拆分Opensea?
  14. 微信小程序如何实现(点击发送弹幕)
  15. 设置杀怪KillMonBurstRate爆率、KillMonExpRate经验倍数
  16. 蒙特卡洛(Monte Carlo)方法的介绍和应用
  17. C++ API设计 - 读书笔记(XMind)
  18. 使用python画K线图(蜡烛图)
  19. Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
  20. html制作心形状图片,HTML5 Canvas实现玫瑰曲线和心形图案的代码实例

热门文章

  1. linux环境安装Kafka最新版本 jdk1.8
  2. 发送http和https请求工具类 Json封装数据
  3. IDEA解决sun.misc.BASE64Encoder找不到jar包的解决方法
  4. iscroll的使用
  5. java.net.ConnectException: Connection refused: no further information
  6. java构造方法 this_Java中的构造方法this、super的用法详解
  7. pythondjango网页开发_Python-Web开发 Django 简介
  8. python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程
  9. C语言 __DATE__ - C语言零基础入门教程
  10. 2020计算机语言排行 rust,RedMonk 2020 年 Q3 编程语言排行:Rust 首次进入前 20