RowSet是可滚动。可更新。可序列化的结果集
RowSet接口继承了ResultSet接口,RowSet接口下包含JdbcRowSet,CachedRowSet,FilterRowSet,JoinRowSet,WebRowSet子接口,除了JdbcRowSet需要保持与数据库的连接之外,其余4个子接口都是离线的RowSet(即无需保持数据库连接,创建离线的RowSet时已经将底层数据读取到了内存中)
注意此时的RowSet只是接口,并没有实现类
在java7之后,提供了RowSetProvider实现类和RowSetFactory接口
如何使用?
1创建JdbcRowSet
Class.forName(driver);
RowSetFactory factory=RowSetProvider.newFactory();
JdbcRowSet js=factory.createJdbxRowSet();
js.setUrl();
js.setUsername();
js.setPassword();
js.setCommand();
js.execute();
2离线的RowSet CachedRowSet,FilterRowSet,JoinRowSet,WebRowSet
离线的RowSet'会直接将底层数据读入内存中,封装成RowSet对象,javabean
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,pass);
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(sql);
RowSetFactory factory=RowSetProvider.newFactory();
CachedRowSet cs=factory.createCachedRowSet();
cs.populate(rs);//使用ResultSet装填RowSet
rs.close();
st.close();
conn.close();
离线RowSet的查询分页
由于CachedRowSet会将数据记录直接装载到内存中,因此如果sql查询的记录过大,CachedRowSet将会占用大量的内存,
因此CachedRowSet提供了分页:一次装载ResultSet中的几条记录
populate(ResultSet rs,int startRow);
setPageSIze(int pageSize);//设置CachedRowSet每次返回多少条记录
previousPage();读取上一页的记录
nextPage();//读取下一页的记录
分页代码实现?
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,pass);
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(sql);
RowSetFactory factory=RowSetProvider.newFactory();
CachedRowSet cs=factory.createCachedRowSet();
cs.setPageSize(pageSize);//设置每页显示pageSize条记录
cs.populate(rs,(page-1)*pageSize+1);//使用ResultSet装载RowSet,设置从第几条记录开始