java [30] 可滚动结果集及分页技术。

需求,查询过程中,希望向前取结果。或者实现分页功能,提取查询数据的一部分。

但是因为是讲数据全部取出来,然后从中取出部分数据(翻页功能),占用了大量内存,可能会导致内存溢出。

部分数据库自己可以实现翻页功能,比如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);
		}
		
		
		
	}

}

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/81990348