需求,查询过程中,希望向前取结果。或者实现分页功能,提取查询数据的一部分。
但是因为是讲数据全部取出来,然后从中取出部分数据(翻页功能),占用了大量内存,可能会导致内存溢出。
部分数据库自己可以实现翻页功能,比如mysql :SELECT * FROM t1 LIMIT 4,10;
如果数据库不能实现翻页功能,jdbc实现方法如下:
package day820;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Scrollertest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Readscroll();
}
public static void Readscroll(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = jdbcUtils.getConnection();
//3.创建语句
//查询
String sql = "select id,name,passwd,salary from T1 ";
//可传递参数
ps = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getInt("id")+ "\t" +rs.getString("name")+"\t"
+rs.getString("passwd")+"\t"+rs.getFloat("salary"));
}
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//向前滚动
//绝对定位
rs.absolute(4);
//rs.afterLast() 到最后一行后面
//rs.beforeFirst() 恢复到默认,第一行的前面
//从第四行向前取,取第三行
rs.previous();
System.out.println(rs.getInt("id")+ "\t" +rs.getString("name")+"\t"
+rs.getString("passwd")+"\t"+rs.getFloat("salary"));
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//翻页功能从第5条数据开始取后面10条数据
rs.absolute(4);
int id =0;
while(rs.next()&&id<10){
System.out.println(rs.getInt("id")+ "\t" +rs.getString("name")+"\t"
+rs.getString("passwd")+"\t"+rs.getFloat("salary"));
id++;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
//6.释放资源
//jdbcUtils.free(rs,st,conn);
jdbcUtils.free(rs, ps, conn);
}
}
}