java jdbc rowset_JAVA基础知识之JDBC——RowSet

RowSet概念

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

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

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

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

6dd86a6f5ed9fc407f3cb8f0f181f304.png

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一样的。 程序执行结果如下,

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java厨房_JAVA环境搭建,厨房安装图文教程!

在“系统变量”栏下执行三项操作:①新建“Java_Home”,设置其值为 JDK所在的绝对路径,如果你的事刚才的默认路径,那值为:C:Program FilesJavajdk1.7.0_02②新建“Classpath”(如果已有,则直接编辑)&#xf…

java post get 请求_java get post 请求

packagewzh.Http;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava.util.List;importjava.util.Map;public classHttpRequest {/*** 向指定UR…

用java做日记本系统_jsp+servlet开发java web个人日记本系统

项目描述Jsp_Servlet技术使用个人日记本系统,主要有日记分类,添加日记,删除日记和一些个人资料的修改。运行环境jdk8tomcat7mysql5.6IntelliJ IDEA(eclipse)项目技术(必填)Jsp Servletbootstrapjqueryckeditor数据库文件(可选)链接&#xff1…

java类加载过程_java类的加载过程

在这本书里面,在讲到类初始化的五种情况时,提及了一个比较有趣的事情。先来看看下面的代码public class SubClass {static{System.err.println("I m your son");}public static final int name 111;}这个时候如果调用SubClass.name&#xff0…

java mvc 导出excel_Java springMVC POI 导出 EXCEL

思路 :将需要导出的数据存放在一个List中创建一个EXCEL表 注意 XSSFWorkbook 只能操作2007以上的版本,XSSFWorkbook 只能操作2003一下的版本,所以需要的时候可以使用 Workbook创建对象处理兼容性遍历List 并将每条数据 写入 EXCEL表中具体代码…

java 排序原理_简单选择排序算法原理及java实现(超详细)

简单选择排序的原理简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换。以此类推,一直到待排…

python对象点方法_python面向对象知识点疏理

面向对象技术简介类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。class类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员&#…

ckeditor java 上传_CKEditor粘贴图片自动上传到服务器(Java版)

环境:java,springmvc,ckeditor,tomcat,maven情况:在做项目的时候发现本地图片粘贴到ckeditor中,img标签的src中的值是“data:image/png;base64,”开头的,后面会跟一串字符串,图片越大字符串越长,这样的图片…

java 序列化声明_显式声明默认Java类序列化方法的原因是什么?

我定期看到具有以下结构的Java类:class MyClass implements Serializable {private static final long serialVersionUID 1L;// ...private void writeObject(final java.io.ObjectOutputStream s) throws IOException {s.defaultWriteObject();}private void read…

java 百度poi_Android应用中使用百度地图API之POI(三)

先看执行后的图吧:POI(Point of Interest)。中文能够翻译为“兴趣点”。在地理信息系统中。一个POI能够是一栋房子、一个商铺、一个邮筒、一个公交站等 具体:http://developer.baidu.com/map/sdkandev-4.htm主要应用 MKSearch 类:com.baidu.…

java 顺序存储键值对_java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)...

import java.util.*;public class Person implements Comparable//使Person的属性具有比较性{private String name;private int age;public Person(String name,int age)//初始化构造函数{this.name name;this.age age;}public void set(String name,int age)//重新设置姓名和…

java日历事件处理_日历表的事件处理和管理(刘静)

1 //添加gridview,显示具体的日期2 SuppressLint("ResourceAsColor")3 private voidaddGridView() {4 LinearLayout.LayoutParams params newLinearLayout.LayoutParams(5 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);6 //取得屏幕的宽度和高度7 WindowMa…

java第四次上机作业_第十java上机作业

第十java上机作业 第七章上级作业 7.1 public class Rectangle { double width1; double height1; String color“white“; public Rectangle(){} public Rectangle(double width,double height,String color) { this.widthwidth; this.heightheight; this.colorcolor; } publi…

java解析带斜杠的参数_Java Spring MVC应用程序仅接受带有斜杠的POST请求

war文件名是forms.war。 web.xml中的url模式为"/"控制器操作的RequestMapping为"/"如果遇到localhost:8080 /表单,则RequestMethod.GET操作正常工作如果针对localhost:8080/forms点击发布数据,则不会触发RequestMethod.P…

java文件编码格式环境变量_Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8...

一切都是windows的控制台默认编码GBK问题情景:使用jenkins构建,console 输出的中文乱码。代码编码格式是utf-8,因为Jenkins会默认读取当前系统的编码格式,导致构建日志乱码和selenium自动化测试输入的中文乱码。控制台输出乱码摸索…

http multipart java_Http MultiPart请求

我正在尝试使用httpClient库上传图像(多部分/表单数据) . 我可以使用httpPost方法和byteArrayRequestEntity上传图像 . 以下是我使用的代码:File file new File(imageFilePath);HttpClient client new HttpClient();PostMethod method new PostMethod("http…

java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

对于分布式使用NginxTomcat实现负载均衡,最常用的均衡算法有IP_Hash、轮训、根据权重、随机等。不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因此会出现session不…

python3.8使用方法_python3.8新特性

python3.8新特性Python3.8稳定版已发布,官网发布了一篇介绍新特性的文章,在此记录一下。新增赋值操作符:作用:把较大表达式中的某部分值赋给变量,因为看起来像海象的眼睛和牙齿,: 操作符有个特别的名字:海象操作符范例…

java责任链设计模式 订单_Java责任链设计模式实例分析

本文实例讲述了Java责任链设计模式。分享给大家供大家参考,具体如下:一 代码abstract class AbstractHandler {private Handler Handler null;// 持有责任链中下一个责任处理者的引用public void setHandler( Handler handler ) {this.Handler handler…

java map去重复的数据_使用HashMap去重复数据.

因为HashMap是键值对形式,所以一个键只对应一个Value,利用这个原理,我们就可以根据某列重复数据做键对重复数据进行处理啦~首先先看看我要处理 的数据然后我最后想要的结果:需求:根据groupName每个分组信息只显示一条数…