package cn.org.rapid_framework.page.impl; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapperResultSetExtractor; import cn.org.rapid_framework.page.Page; import cn.org.rapid_framework.page.PageRequest; /** * Jdbc分页信息,需要Jdk 1.5的支持 * @author badqiu * @see Page */ @Deprecated public class JdbcScrollPage extends Page //implements Page { /** * 构建JdbcPage对象,完成JDBC的ResultSet分页处理 * * @param rs ResultSet对象,ResultSet必须是可滚动的数据集,可以通过以下的Statement执行查询。 * Statement stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); * @param pageNumber 当前页编码,从1开始,如果传的值为Integer.MAX_VALUE表示获取最后一页。 * 如果你不知道最后一页编码,传Integer.MAX_VALUE即可。如果当前页超过总页数,也表示最后一页。 * 这两种情况将重新更改当前页的页码,为最后一页编码。 * @param pageSize 每一页显示的条目数 * @throws SQLException */ public JdbcScrollPage(ResultSet rs,RowMapper rowMapper,int pageNumber, int pageSize) throws SQLException { super(pageNumber,pageSize,moveToLast(rs)); this.result = extractDataList(rs,rowMapper,pageNumber,pageSize); } public JdbcScrollPage(ResultSet rs,int totalCount,RowMapper rowMapper,int pageNumber, int pageSize) throws SQLException { super(pageNumber,pageSize,totalCount); this.result = extractDataList(rs,rowMapper,pageNumber,pageSize); } public JdbcScrollPage(ResultSet rs,int totalCount,RowMapper rowMapper,PageRequest p) throws SQLException{ this(rs,totalCount,rowMapper,p.getPageNumber(),p.getPageSize()); } public JdbcScrollPage(ResultSet rs,RowMapper rowMapper,PageRequest p) throws SQLException{ this(rs,rowMapper,p.getPageNumber(),p.getPageSize()); } private static int moveToLast(ResultSet rs) throws SQLException { rs.last(); return rs.getRow(); } private List extractDataList(ResultSet rs, RowMapper rowMapper,int pageNumber, int pageSize) throws SQLException { List result = new ArrayList(pageSize); if (pageNumber > 1) { rs.absolute(((pageNumber - 1) * pageSize)); } int rowNum = 0; while (rs.next()) { Object row = rowMapper.mapRow(rs, rowNum++); result.add(row); if(pageSize == (rowNum + 1)) break; } return result; } }