⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdpage.java

📁 j2ee程序。 spring、xml、 实现增加内容选项。
💻 JAVA
字号:
package com.gd.mvc.util;

import java.sql.Connection;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.sql.rowset.CachedRowSet;

import com.gd.jdbc.GdPageCachedRowSet;
import com.gd.jdbc.impl.GdDbConnection;

public class GdPage {
	public GdPageCachedRowSet pageCrs = null;
    Map[] map = null;
    private List list;
    private String action = "";
    private int row;
    private String page;
    protected String sql;

    /**
     * 构造函数
     * @param request
     * @param sql,要分页查询的sql语句
     * @param row,每页要现实的笔数
     * @throws Exception 
     */
    public GdPage(HttpServletRequest request, String sql, String row)  {
        //获取连接
        GdDbConnection conn = new GdDbConnection(this);
        row = request.getParameter("gd_row") == null ? row : (String) request.getParameter("gd_row");
        //获取设定每页显示笔数
        this.row = Integer.parseInt(row);
        //表示获取要调转到的页面
        page = request.getParameter("gd_jumpPage") == null ? "" : (String) request.getParameter("gd_jumpPage");
        //表示跳转的时候要查询的sql
        String gd_querSql = request.getParameter("gd_querSql") == null ? "" : (String) request.getParameter("gd_querSql");
        //是否重新设定了sql
        String gd_resetSql = request.getAttribute("gd_resetSql") == null ? "" : (String) request.getAttribute("gd_resetSql");
        //如果重新设定了sql,则page为空,表示从第一页开始
        if ("true".equals(gd_resetSql))
            page = "";
        //如果跳转的时候要查询的sql,重新设定了sql,则送给数据库的为从参数中传来的sql
        if ("".equals(gd_querSql) || "true".equals(gd_resetSql)) {
        	this.sql = sql;
        } else {
        	this.sql = gd_querSql;//否则使用页面隐藏的sql
        }
        //开始进入数据库进行查询
        try {
            if (!"".equals(this.sql)) {
            	pageCrs = new GdPageCachedRowSet(conn.getConnection(this), request, this.sql);
            	//设定每页显示的笔数
            	pageCrs.setPageSize(Integer.parseInt(row));
            	//假如指定了调整的页码,则调转到该页
                if (!"".equals(page))
                    gotoPage(page);
                map = queryAllMap(pageCrs.getCachedRowSet());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public GdPage(HttpServletRequest request, Connection conn, String sql, String row) {
    	row = request.getParameter("gd_row") == null ? row : (String) request.getParameter("gd_row");
        //获取设定每页显示笔数
        this.row = Integer.parseInt(row);
        //表示获取要调转到的页面
        page = request.getParameter("gd_jumpPage") == null ? "" : (String) request.getParameter("gd_jumpPage");
        //表示跳转的时候要查询的sql
        String gd_querSql = request.getParameter("gd_querSql") == null ? "" : (String) request.getParameter("gd_querSql");
        //是否重新设定了sql
        String gd_resetSql = request.getAttribute("gd_resetSql") == null ? "" : (String) request.getAttribute("gd_resetSql");
        //如果重新设定了sql,则page为空,表示从第一页开始
        if ("true".equals(gd_resetSql))
            page = "";
        //如果跳转的时候要查询的sql,重新设定了sql,则送给数据库的为从参数中传来的sql
        if ("".equals(gd_querSql) || "true".equals(gd_resetSql)) {
        	this.sql = sql;
        } else {
        	this.sql = gd_querSql;//否则使用页面隐藏的sql
        }
        //开始进入数据库进行查询
        try {
            if (!"".equals(this.sql)) {
            	pageCrs = new GdPageCachedRowSet(conn, request, this.sql);
            	//设定每页显示的笔数
            	pageCrs.setPageSize(Integer.parseInt(row));
            	//假如指定了调整的页码,则调转到该页
                if (!"".equals(page))
                    gotoPage(page);
                map = queryAllMap(pageCrs.getCachedRowSet());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //设定页面表单的action动作
    public void setAction(String action) {
        this.action = action;
    }
    //获取页面表单的action动作
    public String getAction() {
        return this.action;
    }
    /**
     * 获取分页查询的结果
     * 
     * @return Map[]
     */
    public Map[] getDataMaps() {
        return this.map;
    }
    /**
     * 返回当页查询后的笔数
     * 
     * @return int
     */
    public int getPageRowsCount() {
        return pageCrs.getPageRowsCount();
    }
    /**
     * 返回显示内容
     * 
     * @return String
     */
    public String getBtnHtml() {
    	//隐藏2个字段,用来存储要调转的页面和要查询的sql语句
        StringBuffer sb = new StringBuffer();
        sb.append("<table width='100%' cellspacing='0' cellpadding='0' border=0><tr><td>");
        sb.append("<input type='hidden' name='gd_jumpPage' value='" + page
                + "'>");
        sb.append("<input type='hidden' name='gd_querSql' value=\"" + sql
                + "\">");
        //sql语句为空,则返回空
        if ("".equals(this.sql))
            return "";
        //开始组装分页按钮
        sb.append("<A HREF='javascript:gotoPage(1)'>首页</A>");
		if (1 == pageCrs.getPageCount()) {
		sb.append("&nbsp;上一页&nbsp;");
		sb.append("&nbsp;下一页&nbsp;");
		} else if (pageCrs.getCurPage() == 1) {
		sb.append("&nbsp;上一页&nbsp;");
		sb.append("<A HREF='javascript:gotoPage("
		        + (pageCrs.getCurPage() + 1)
		        + ")'>&nbsp;下一页&nbsp;</A>");
		} else if (pageCrs.getCurPage() == pageCrs.getPageCount()) {
		sb.append("<A HREF='javascript:gotoPage("
		        + (pageCrs.getCurPage() - 1)
		        + ")'>&nbsp;上一页&nbsp;</A>");
		sb.append("&nbsp;下一页&nbsp;");
		} else {
		sb.append("<A HREF='javascript:gotoPage("
		        + (pageCrs.getCurPage() - 1)
		        + ")'>&nbsp;上一页&nbsp;</A>");
		sb.append("<A HREF='javascript:gotoPage("
		        + (pageCrs.getCurPage() + 1)
		        + ")'>&nbsp;下一页&nbsp;</A>");
		}
		
		sb.append("<A HREF='javascript:gotoPage("
		        + pageCrs.getPageCount() + ")'>&nbsp;尾页&nbsp;</A>");
        sb.append("跳至第 ");
        sb.append("\n <select name='").append("gd_pageNo").append(
                "' onchange='javascript:gotoPage(this.value)'>\n");
        for (int i = 0; pageCrs != null && i < pageCrs.getPageCount(); i++)
            if (pageCrs.getCurPage() == i + 1)
                sb.append("<option value='").append(i + 1).append(
                        "' selected>").append(i + 1).append("\n");
            else
                sb.append("<option value='").append(i + 1).append("'>")
                        .append(i + 1).append("\n");

        sb.append("</select>");

        sb.append(" ");
        sb.append("\n <input type='text' size='2' name='").append(
                "gd_pageNoTxt").append("' value='1' >页\n");
        sb
                .append("<A HREF='javascript:gotoPage(form1.gd_pageNoTxt.value)'>GO&nbsp;</A>");

        sb.append("每页行数 ");
        sb.append("\n <select name='").append("gd_row").append("' >\n");
        sb.append("<option value='").append(row).append("'>").append(row)
                .append("\n");
        int str[] = {5, 10, 15, 20, 30, 50};
        for (int i = 0; i < str.length; i++)
            if (this.row == str[i])
                sb.append("<option value='").append(str[i]).append(
                        "' selected>").append(str[i]).append("\n");
            else
                sb.append("<option value='").append(str[i]).append("'>").append(str[i]).append("\n");

        sb.append("</select>");
        //生成script脚本
        sb.append("<script>");
        if ("".equals(this.action)) {
            sb.append("function gotoPage(pagenum){if (isNaN(pagenum)) {alert('每页必须是数字');}else {document.form1.gd_jumpPage.value = pagenum;var f = document.form1;var ot = f.target;var oa = f.action;f.target='_self';f.submit();f.target=ot;f.action=oa;return ;}}");
        } else {
            sb.append("function gotoPage(pagenum){if (isNaN(pagenum)) {alert('每页必须是数字');}else {document.form1.gd_jumpPage.value = pagenum;var f = document.form1;var ot = f.target;var oa = f.action;f.target='_self';f.action='"
                   + this.action
                   + "'; f.submit();f.target=ot;f.action=oa;return ;}}");
        }
        sb.append("</script>");
        sb.append("</td></tr></table>");

        return sb.toString();
    }
    /**
     * 转到指定页
     */
    private void gotoPage(String page) {
    	pageCrs.gotoPage(Integer.parseInt(page));
    }
    /**
     * 该方法用来将获取的栏位名称和栏位内容相对应
     * 
     * @param rs
     * @return Map
     */
    private Map getMapFromRs(CachedRowSet rs) throws SQLException  {
        Map map = new HashMap();
        List columnNamesList = new ArrayList();
        int columnCount = 0;
        try {
        	//获取ResultSetMetaData的字段数目
        	columnCount = rs.getMetaData().getColumnCount();
        	//获取每个字段的名称
        	columnNamesList = setColumnNameByMeta(rs.getMetaData());
            for (int i = 0; i < columnCount; i++) {
            	//将字段名和对应的值存入Map
            	map.put((String) columnNamesList.get(i), rs.getString(i + 1));
            }
        } catch (SQLException e) {
        	throw new SQLException("执行getMapFromRS失败" + e);
        } finally {
        	return map;
        }
    }
    
    /**
     * 该方法用来获取处理数据库中的栏位名和栏位数目
     * @param rsMetadata 
     * @return List
     */
    private List setColumnNameByMeta(ResultSetMetaData rsMetadata) throws SQLException {
        List columnNamesList = new ArrayList();
        try {
        	//获取ResultSetMetaData的字段数目
            for (int i = 0; i < rsMetadata.getColumnCount(); i++) {
            	columnNamesList.add(rsMetadata.getColumnName(i + 1));//获取每个字段的名称
            } 
        } catch (SQLException e) {
        	throw new SQLException("执行setColumnNameByMeta失败" + e);
        } finally {
        	return columnNamesList;
        }
    }
    /**
	 * 用来获取多笔数据结果集
	 * @param sql
	 * @return Map[]
	 * @throws SQLException
	 */
	public Map[] queryAllMap(CachedRowSet crs) throws SQLException {
		Map[] map = null;
		CachedRowSet rs = null;
        List list = new ArrayList();
        try {
        	//通过getAllCachedRowSet获取rs,然后循环将每笔转换为map
            for (rs = crs; rs.next();) {
            	list.add(getMapFromRs(rs));//将每笔转换为map
            }
        } catch (SQLException e) {
        	throw new SQLException("执行queryAllMap失败" + sql + e);
        } finally {
            if (rs != null) {
            	rs.close();//关闭rs
            }
            if (list.size() != 0) {
                map = new Map[list.size()];
                list.toArray(map);//将list转换为map数组
            }
            return map;  
        }
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -