滚动
一般结果集只能是向下的,不是滚动的,你要是想让它滚动你得设置才行。
类名或者接口里面有静态的可以。接口里面的属性全部都是public static final,类名/接口名.是属性,这些都是常量。
结果集是你查询到的结果,数据库不是给你一个人玩的吧。在高并发访问的时候很容易出现一些问题。就是你在查的时候可能别人改了。问题:你查的时候别人改了,那就是你查到的是改了的还是查到的是没改了的呢?你得到改还是不改的。
滚动结果集怎么创建?通过设置参数来创建滚动结果集。对于一些特殊需求滚动结果集绝对是有用的。分页:把数据库的某些记录拿出来,数据库里面有100条记录,全显示出来的话一页显示100条,一页显示20条5页就OK了。拿出第3页的数据:把absolute定位到第3页的开始的位置,往下循环20次就OK了,这就是滚动结果集。这个方式是可以做分页的,但是后面不会这么做。这是通用的方案,根本就不需要考虑什么数据库,只要是java支持的数据库就行,因为使用了JDBC。JDBC是跨数据库的。但是这种方案性能太低,我们后面讲分页用的是数据库本身提供的一些分页的函数,它的性能高一些。要是有一天要做一个跨数据库的分页可以这么做。
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import cn.itcast.utils.JdbcUtils; //后面开发滚动结果集用的不多,实际开发用的也不多 public class JdbcDemo7 { public static void main(String[] args) throws SQLException { //1.得到一个Connection Connection con= JdbcUtils.getConnectin(); //2.得到一个执行sql语句Statement Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//这就代表了一个滚动的可以更新的结果集 //3.执行sql,得到结果集 ResultSet rs = st.executeQuery("select * from user"); //滚动结果集是可以向上向下跑,还可以绝对定位 //4.定位 //游标默认是在第一行上面,那你向上没了。所以是不行的 //你得让这游标往下走才能向上嘛。 rs.absolute(3);//3不是代表id值,代表的是一个绝对的物理行号 //System.out.println(rs.getInt("id") + " " + rs.getString("username") + ""); //rs.afterLast();//afterLast就是直接达到结果集的最后面 最后一行的下面 /* while(rs.previous()){ System.out.println(rs.getInt("id") + " " + rs.getString("username") + ""); }*/ rs.updateString("password","456");//对应哪个列进行修改 rs.updateRow(); //5.关闭 rs.close(); st.close(); con.close(); } }