📄 resultsetpage.java
字号:
package util.database.datalist;import java.sql.*;/** * Page实现了DataListHandler。 * * 用于操作ResultSetDataList对象,对查询结果集进行分页显示。在进行显示的期间,必须 * 保持数据库连接Connection和结果集ResultSet没有关闭。 * 基本使用方法举例: * <pre> * int index = 4, count = 10;//显示第5到第14条记录 * Connection conn = Pool.getConnection(); * //(1)使用一个QueryDAO的具体子类来初始化页对象 * ResultSetQueryDAO dao = new ResultSetQueryDAO(); * ResultSetPage page = new ResultSetPage(conn, dao); * * //(2)或者直接使用一个ResultSet对象来初始化页对象 * //ResultSet rs = ...; * //ResultSetPage page = new ResultSetPage(conn, rs); * * //需要显示的当前页chunk * DataList chunk = page.getListChunk(index, count); * //当前页的前后是否还有记录,用于显示PRVEIOUS和NEXT按钮 * boolean hasPrevious = page.hasPrevious(); * boolean hasNext = page.hasNext(); * //遍历显示当前页的记录 * DataListIterator it = chunk.iterator(); * while (it.hasNext()) * { * String[] valuesOfRow = it.next(); * for(int i = 0; i < valuesOfRow.lengtn; i++) * System.out.println(valuesOfRow[i]); * } * * </pre> * * @author Michael Zeng * @version 1.0 September 23, 2002 * * @see QueryDAO * @see DataListIterator */public class ResultSetPage implements DataListHandler{ private Connection conn = null; private ResultSet rs = null; private ResultSetDataList dl = null; private RowMapper mapper = null; private QueryDAO dao = null; private int indexOfDataList = 0, countPerPage = 0; /** * 构造函数,提供用于查询的DAO具体对象。 * * @param conn 数据库连接 * @param dao 用于查询的DAO具体对象 * @throws SQLException * */ public ResultSetPage(Connection conn, QueryDAO dao) throws SQLException { this.conn = conn; //使用使用DAO具体对象查询 this.rs = (ResultSet)dao.doQuery(conn); initiateDataList(); } /** * 构造函数,直接提供查询的结果集。 * * @param conn 数据库连接 * @param rs 查询的结果集 * @throws SQLException */ public ResultSetPage(Connection conn, ResultSet rs) throws SQLException { this.conn = conn; this.rs = rs; initiateDataList(); } /** * 得到被查询的字段名称数组 * * @return String[] 字段名称数组 */ public String[] getColumns() { return mapper.getRowColumns(); } /** * 得到查询结果的一个子集 * * @param startIndex 子集的起始位置, 从0开始 * @param count 子集的个数 * @return Datalist 返回一个子集 * @throws Exception */ public DataList getListChunk(int startIndex, int count) throws Exception { if(dl == null) throw new Exception("还没有执行查询或者查询过程出现异常!"); indexOfDataList = Math.abs(startIndex); countPerPage = Math.abs(count); return new ResultSetDataListChunk(dl, indexOfDataList, countPerPage); } /** * 取得整个查询结果的大小,功能类似于java.util.List.size() * * @return size 查询结果的大小 * @throws SQLException */ public int size() throws SQLException { if(dl == null) throw new SQLException("还没有执行查询或者查询过程出现异常!"); return dl.size(); } /** * 检查子集的前面是否还有查询结果 * * @return boolean true表示前面还有查询结果 */ public boolean hasPrevious() { if(indexOfDataList == 0) return false; else return true; } /** * 检查子集的后面是否还有查询结果 * * @return boolean true表示后面还有查询结果 * @throws SQLException */ public boolean hasNext() throws SQLException { if(indexOfDataList + countPerPage >= dl.size()) return false; else return true; } /** * 关闭对象 * @throws SQLException */ public void close() throws SQLException { if(rs != null) { rs.close(); rs = null; } mapper = null; } /** * helper方法,设置印射,生成包含结果计的ResultSetDataList对象 * * @throws SQLException */ private void initiateDataList() throws SQLException { //设置印射,生成包含结果计的ResultSetDataList对象 mapper = new ResultSetRowMapper(rs); dl = new ResultSetDataList(mapper, conn, rs); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -