<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 13,  comments - 8,  trackbacks - 0
         我是用Struts的,當然就要使用到MVC這個模式,分頁的時候也是這樣的。
           首先要有一個和數據庫鏈接的bean,我們暫時叫DBUtil吧,這里面封裝了很多和數據庫有關的東西,比如有查詢,修改,插入等方法,這是一個基本的類,這里我們用到的是查詢,這個方法返回的數據類型是Object[][]。這里大家要注意一下,你也可以返回別的類型,但是一定要注意把后面對應的程序也修改一下。一下是這個類的部分代碼:
    package com.model;

    import com.attribute.Constants;

    import java.sql.*;
    import java.util.*;


    /**
     * Created by IntelliJ IDEA.
     * User: 7612CE
     * Date: 2005-6-2
     * Time: 21:41:38
     * To change this template use Options | File Templates.
     */
    public class DBUtil {

        String sDBDriver=Constants.DBDriver;
        String url=Constants.DBUrl;
        String dbUser=Constants.DBUser;
        String dbPassword=Constants.DBPassword;
        Connection conn=null;
        PreparedStatement stmt=null;
        ResultSet rs=null;

        public DBUtil()throws ClassNotFoundException{
            try{
                Class.forName(sDBDriver);
                conn=DriverManager.getConnection(url,dbUser,dbPassword);
            }catch(Exception e){
               System.out.println("DBUtil():"+e.getMessage());
            }
        }
    /**
         * Search some record in object table
         * @param sql sql segment
         * @ param map values for match
         * @return Collection
         */
        public Object[][] doSearch(String sql,Object [] data)throws SQLException{
            PreparedStatement stmt = conn.prepareStatement(sql);
            for(int i=0;data!=null&&i<data.length;i++){
                System.out.print("the aql is ="+sql);
                System.out.println("data is " + data[i]);
                stmt.setObject(i+1,data[i]);
            }
            ResultSet rset = stmt.executeQuery();
            ResultSetMetaData rsm = rset.getMetaData();
            int col = rsm.getColumnCount();
            ArrayList list = new ArrayList();
            //Each element of list contains a record of resultset
            while(rset.next()){
                list.add(getLine(rset,col));
            }

            if(list.size()==0||col==0){
                closePrepStmt();
                return null;
            }

            closePrepStmt();
            //Construct box as a data matrix
            Object[][] box = new Object[list.size()][col];
            for(int i=0;i<list.size();i++)
                for(int j=0;j<col;j++)
                {
                    box[i][j] =((Object[])list.get(i))[j];
                }
                return box;
        }
      由于是寫分頁的,當然也是要有一個page的類,具體代碼如下,由于有很多注釋,不用一一介紹了:
    package com.util;

        /**
         * Title: 分頁對象<br>
         * Description:  用于包含數據及分頁信息的對象<br>
         *Page類實現了用于顯示分頁信息的基本方法,但未指定所含數據的類型,
         *可根據需要實現以特定方式組織數據的子類,<br>
         *如RowSetPage以RowSet封裝數據,ListPage以List封裝數據<br>
         * Copyright:    Copyright (c) 2002 <br>
         * @author evan_zhao@hotmail.com <br>
         * @version 1.0
         */
        public  class Page implements java.io.Serializable {
            public static final Page EMPTY_PAGE = new Page();
            public static final int  DEFAULT_PAGE_SIZE = 2;
            public static final  int MAX_PAGE_SIZE = 2;

            private int myPageSize = DEFAULT_PAGE_SIZE;

            private int start;
            private int avaCount,totalSize;
            private Object[][] data=null;

            private int currentPageno;
            private int totalPageCount;

            /**
             * 默認構造方法,只構造空頁
             */
           public Page(){
                this.init(0,0,0,DEFAULT_PAGE_SIZE,null);
        }
            /**
                  *構造分頁對象
                 *@param crs 包含一頁數據的OracleCachedRowSet
                   *@param start 該頁數據在數據庫中的起始位置
                  *@param totalSize 數據庫中包含的記錄總數
                 *@param pageSize 本頁能容納的記錄數
                 */
                 public Page(Object[][] crs, int start, int totalSize, int pageSize) {
                     try{
                         int avaCount=0;
                         if (crs!=null) {
                                 avaCount = crs.length;
                         }
                         data = crs;
                         this.init(start,avaCount,totalSize,pageSize,data);
                     }catch(Exception ex){
                         throw new RuntimeException(ex.toString());
                     }
                 }

        /**
             * 分頁數據初始方法
             * @param start 本頁數據在數據庫中的起始位置
             * @param avaCount 本頁包含的數據條數
             * @param totalSize 數據庫中總記錄條數
             * @param pageSize 本頁容量
             * @param data 本頁包含的數據
             */
            protected void init(int start, int avaCount, int totalSize, int pageSize, Object[][] data){

                this.avaCount =avaCount;
                this.myPageSize = pageSize;

                this.start = start;
                this.totalSize = totalSize;

                this.data=data;

                //System.out.println("avaCount:"+avaCount);
                //System.out.println("totalSize:"+totalSize);
                if (avaCount>totalSize) {
                    //throw new RuntimeException("記錄條數大于總條數?!");
                }

                this.currentPageno = (start -1)/pageSize +1;
                this.totalPageCount = (totalSize + pageSize -1) / pageSize;

            if (totalSize==0 && avaCount==0){
                    this.currentPageno = 1;
                    this.totalPageCount = 1;
                }
                //System.out.println("Start Index to Page No: " + start + "-" + currentPageno);
            }

            public  Object[][] getData(){
                return this.data;
            }

            /**
             * 取本頁數據容量(本頁能包含的記錄數)
             * @return 本頁能包含的記錄數
             */
            public int getPageSize(){
            return this.myPageSize;
            }

            /**
             * 是否有下一頁
             * @return 是否有下一頁
         */
            public boolean hasNextPage() {
              /*
                if (avaCount==0 && totalSize==0){
                    return false;
            }
                return (start + avaCount -1) < totalSize;
               */
              return (this.getCurrentPageNo()<this.getTotalPageCount());
            }

            /**
             * 是否有上一頁
             * @return  是否有上一頁
             */
            public boolean hasPreviousPage() {
              /*
                return start > 1;
               */
              return (this.getCurrentPageNo()>1);
            }

            /**
             * 獲取當前頁第一條數據在數據庫中的位置
             * @return
             */
            public int getStart(){
                return start;
            }

            /**
             * 獲取當前頁最后一條數據在數據庫中的位置
             * @return
             */
            public int getEnd(){
                int end = this.getStart() + this.getSize() -1;
                if (end<0) {
                    end = 0;
                }
                return end;
            }

            /**
             * 獲取上一頁第一條數據在數據庫中的位置
             * @return 記錄對應的rownum
             */
            public int getStartOfPreviousPage() {
                return Math.max(start-myPageSize, 1);
            }


            /**
             * 獲取下一頁第一條數據在數據庫中的位置
             * @return 記錄對應的rownum
             */
            public int getStartOfNextPage() {
                return start + avaCount;
            }

            /**
             * 獲取任一頁第一條數據在數據庫中的位置,每頁條數使用默認值
             * @param pageNo 頁號
             * @return 記錄對應的rownum
             */
            public static int getStartOfAnyPage(int pageNo){
                return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE);
            }

            /**
             * 獲取任一頁第一條數據在數據庫中的位置
             * @param pageNo 頁號
             * @param pageSize 每頁包含的記錄數
             * @return 記錄對應的rownum
             */
            public static int getStartOfAnyPage(int pageNo, int pageSize){
                int startIndex = (pageNo-1) * pageSize + 1;
                if ( startIndex < 1) startIndex = 1;
                //System.out.println("Page No to Start Index: " + pageNo + "-" + startIndex);
                return startIndex;
            }

            /**
             * 取本頁包含的記錄數
             * @return 本頁包含的記錄數
             */
            public int getSize() {
                return avaCount;
            }

            /**
             * 取數據庫中包含的總記錄數
             * @return 數據庫中包含的總記錄數
             */
            public int getTotalSize() {
                return this.totalSize;
            }

            /**
             * 取當前頁碼
             * @return 當前頁碼
             */
            public int getCurrentPageNo(){
                return  this.currentPageno;
            }

            /**
             * 取總頁碼
             * @return 總頁碼
             */
            public int getTotalPageCount(){
                return this.totalPageCount;
            }

        }
      由于是用mvc這樣的框架,所以在c這一層僅僅起到一個轉向和收集頁面信息的作用,所以這里我有寫了一個分頁查詢的bean,暫時命名是PageCtBean,代碼如下:
     package com.util;

    import com.model.DBUtil;
    import java.sql.*;
    /**
     * Created by IntelliJ IDEA.
     * User: 7612ce
     * Date: 2005-6-23
     * Time: 10:36:57
     * To change this template use Options | File Templates.
     */
      public class  PageCtBean {
           public final static int MAX_PAGE_SIZE = Page.MAX_PAGE_SIZE;
    protected String countSQL, querySQL;
    protected int pageNo,pageSize,startIndex,totalCount;
     protected javax.sql.RowSet rowSet;
     protected Page setPage;
            protected Object[][] objTables=null;
            protected Object[][] objCount=null;
            protected Object[] obj=null;

           public PageCtBean(){

           }
        /**
             * 構造一查詢出所有數據的PageStatement
    .         * @param sql  query sql
             */
            public PageCtBean(String sql){
                this(sql,1,MAX_PAGE_SIZE);
        }
        /**
             * 構造一查詢出當頁數據的PageStatement
             * @param sql  query sql
             * @param pageNo  頁碼
             */
            public PageCtBean(String sql, int pageNo){
                this(sql, pageNo, Page.DEFAULT_PAGE_SIZE);
            }

            /**
             * 構造一查詢出當頁數據的PageStatement,并指定每頁顯示記錄條數
             * @param sql query sql
             * @param pageNo 頁碼
             * @param pageSize 每頁容量
             */
            public PageCtBean(String sql, int pageNo, int pageSize){
                this.pageNo = pageNo;
                this.pageSize = pageSize;
                this.startIndex = Page.getStartOfAnyPage(pageNo, pageSize);
                this.querySQL = intiQuerySQL(sql, this.startIndex, pageSize);
            }


          /**
             *生成查詢一頁數據的sql語句
             *@param sql 原查詢語句
             *@ startIndex 開始記錄位置
             *@ size 需要獲取的記錄數
             */
            protected String intiQuerySQL(String sql, int startIndex, int size){
                StringBuffer querySQL = new StringBuffer();
                    querySQL.append(sql)
                            .append(" limit ")
                            .append(startIndex-1 )
                            .append(",").append(size);
                    return querySQL.toString();
            }

            /**
             *使用給出的對象設置指定參數的值
             *@param obj 包含參數值的對象
             */
            public void setObject(Object obj[]) throws SQLException{
                        this.obj=obj;
                    }

            public void setCountSql(String sql){
                this.countSQL=sql;
            }
        /**
             * 執行查詢取得一頁數據,執行結束后關閉數據庫連接
             * @return RowSetPage
    .         * @throws SQLException
             */
            public  Page executeQuery() throws ClassNotFoundException{
                       System.out.println("executeQueryUsingPreparedStatement");
                    DBUtil DBean=new DBUtil();
                       try{
                        objCount = DBean.doSearch(this.countSQL,obj);
                           if (!objCount.equals(null)){
                            System.out.println("the count is ="+objCount[0][0].toString());
                               totalCount =Integer.parseInt(objCount[0][0].toString()) ;
                               System.out.println("the count is ="+totalCount);
                           } else {
                               totalCount = 0;
                           }
                           if (totalCount < 1 )
                               return null;
                           objTables= DBean.doSearch(this.querySQL,obj);
                        this.setPage = new Page(this.objTables,startIndex,totalCount,pageSize);
                           return this.setPage;
                       }catch(SQLException sqle){
                           //System.out.println("executeQuery SQLException");
                           sqle.printStackTrace();

                       }catch(Exception e){
                           e.printStackTrace();
                           throw new RuntimeException(e.toString());
                       }
               return null;
                   }
            /**
             *取封裝成Page的查詢結果
             *@return Page
       */
            public Page getPage() {
                return this.setPage;
            }
        }
    接下來是Action里面的代碼,暫時定義這個Action 是ComputerAction,代碼如下:
    package com.action;

    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForm;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;

    import com.form.LoginForm;
    import com.util.LoginBean;
    import com.util.ComputerBean;
    import com.util.BaseView;
    import com.util.Page;
    import com.model.FunctionManager;
    import com.attribute.Constants;
    import com.attribute.SQLBook;

    import java.sql.ResultSet;

    /**
     * Created by IntelliJ IDEA.
     * User: 7612CE
     * Date: 2005-6-14
     * Time: 13:31:34
     * To change this template use Options | File Templates.
     */
    public class ComputerAction extends BaseAction {
        private Log log=LogFactory.getLog(this.getClass().getName());

         public ActionForward execute(ActionMapping mapping,
                         ActionForm Form,
                         HttpServletRequest request,
                         HttpServletResponse response){
              boolean flag=false;
             Object[][] obj=null;
             Page page=new Page();
             Integer id=new Integer(Constants.id);
             String sql=SQLBook.Computer_select_SQL;
             BaseView view=new BaseView();
             String pageNo = request.getParameter("pageNo");
             if (pageNo == null || pageNo.equals("null") || pageNo.length() <= 0) {
                        pageNo = "1";
                    }
             try{
                 Object[] table={id};
                 ComputerBean computerBean=new ComputerBean();
                 computerBean.setBeanDate(sql,table);
                 computerBean.setPageNo(pageNo);
                 page=computerBean.getResult();
                 obj=page.getData();
                 if(!obj.equals(null)){
                     flag=true;
                     view.setObject(obj);
                     request.setAttribute(Constants.QUERY_RESULT,view);
                     request.setAttribute("page",page);
                 }

             }catch(Exception ex){
                 ex.printStackTrace();
             }
             log.info("system print the flag ="+flag);
             if(flag){
               return(mapping.findForward(Constants.FORWARD_SUCCESS));
             }else{
                 return(mapping.findForward(Constants.FORWARD_FAILURE));
             }
          }

    由于Action里面用到了查詢的SQL語句,所有SQL語句寫在一個特定的類中,這個類名定義為SQLBook,代碼如下:
    public class SQLBook {

        public SQLBook(){}
    /**
         * computer sql
         */

        public static final String Computer_select_SQL=
               "select a.id,a.bookname,a.bookclass,b.classname,"+
               "a.author,a.publish,a.bookno,a.content,a.prince,a.amount,"+
               "a.Leav_number,a.regtime,a.picture from book a,bookclass b"+
               " where a.Bookclass = b.Id and a.bookclass=? "+
               " order by a.Id desc ";
        public static final String Computer_select_count_sql=
                "select count(*) from book a,bookclass b"+
               " where a.Bookclass = b.Id and a.bookclass=? "+
               " order by a.Id desc ";

    }
    到此為止,基本上分頁的代碼基本完成,為了使得分頁的代碼共用,我把他封裝成了一個標簽,這個方法是參考一個網友的文章上寫的,在這里表示感謝。這個自定義的標簽命名為PaginatorTag,代碼如下:
    package com.util;

    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    public class PaginatorTag extends BodyTagSupport {
        protected Log log = LogFactory.getLog(this.getClass());
    //以下是一標簽中的一些屬性,后面有較詳細的介紹
        int currentPage = 1;//當前頁碼
        String url = "";//轉向的地址
        int totalSize = 0;//總的記錄數
        int perPage = 20;//每頁顯示的記錄數目
        boolean showTotal = true;//是否顯示總數量
        boolean showAllPages = false;//是否顯示總頁碼
        String strUnit ="";//計數單位

        //得到當前頁碼
        public int getCurrentPage() {
            return currentPage;
        }
        //設置當前頁碼
        public void setCurrentPage(int currentPage) {
            this.currentPage = currentPage;
        }
        //得到每頁顯示記錄的數目
        public int getMaxPerPage() {
            return perPage;
        }
        //設置每頁顯示的記錄數目
        public void setMaxPerPage(int perPage) {
            this.perPage = perPage;
        }
        //判斷是否顯示總的頁碼數目
        public boolean isShowAllPages() {
            return showAllPages;
        }
        //設置是否顯示總的頁碼數目
        public void setShowAllPages(boolean showAllPages) {
            this.showAllPages = showAllPages;
        }
        //判斷是否顯示總的記錄數目
        public boolean isShowTotal() {
            return showTotal;
        }
        //設置是否顯示總的記錄數目
        public void setShowTotal(boolean showTotal) {
            this.showTotal = showTotal;
        }
        //得到計數單位
        public String getStrUnit() {
            return strUnit;
        }
        //設置計數單位
        public void setStrUnit(String strUnit) {
            this.strUnit = strUnit;
        }
        //得到總的記錄數目
        public int getTotalPut() {
            return totalSize;
        }
        //設置總的記錄數目
        public void setTotalPut(int totalSize) {
            this.totalSize = totalSize;
        }
        //得到轉向的鏈接地址
        public String getUrl() {
            return url;
        }
        //設置鏈接地址
        public void setUrl(String url) {
            this.url = url;
        }
        public int doStartTag() throws JspException {
            return SKIP_BODY;
        }


        public int doEndTag() throws JspException {
            String out = showPage(currentPage, url, totalSize, perPage, showTotal, showAllPages, strUnit);
            try {
                pageContext.getOut().print(out);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return EVAL_PAGE;
        }


        /**
         * 作 用:顯示“上一頁 下一頁”等信息
         *
         * @param url
         *            ----鏈接地址
         * @ param totalSize
         *            ----總數量
         * @ param perPage
         *            ----每頁數量
         * @param showTotal
         *            ----是否顯示總數量
         * @param showAllPages
         *            ---是否用下拉列表顯示所有頁面以供跳轉。有某些頁面不能使用,否則會出現JS錯誤。
         * @param strUnit
         *            ----計數單位
         * @return .
         * @ throws IOException
         */
        protected String showPage(int currentPage,String url, int totalSize, int perPage,
                boolean showTotal, boolean showAllPages, String strUnit){
            int n = 0;
            StringBuffer buf = new StringBuffer();
            String strUrl;
            n = (totalSize + perPage -1) / perPage;
            buf.append("<table align='center'><tr><td>");
            if (showTotal == true)
                buf.append("共 <b>" + totalSize + "</b> " + strUnit
                        + "  ");
            strUrl = JoinChar(url);
            if (currentPage < 2) {
                buf.append("首頁 上一頁 ");
            } else {
                buf.append("<a href='" + strUrl + "pageNo=1' title='首頁'>首頁</a> ");
                buf.append("<a href='" + strUrl + "pageNo=" + (currentPage - 1)
                        + "' title='上一頁'>上一頁</a> ");
            }
            if (n - currentPage < 1)
                buf.append("下一頁 尾頁");
            else {
                buf.append("<a href='" + strUrl + "pageNo=" + (currentPage + 1)
                        + "' title='下一頁'>下一頁</a> ");
                buf.append("<a href='" + strUrl + "pageNo=" + n + "' title='尾頁'>尾頁</a>");
            }
            buf.append(" 頁次:<strong><font color=red>" + currentPage
                    + "</font>/" + n + "</strong>頁 ");
            buf.append(" <b>" + perPage + "</b>" + strUnit + "/頁");
            if (showAllPages == true) {
                buf
                        .append(" 轉到:<select name='page' size='1' onchange=\"javascript:window.location='"
                                + strUrl
                                + "pageNo="
                                + "'+this.options[this.selectedIndex].value;\">");
                for (int i = 1; i <= n; i++) {
                    buf.append("<option value='" + i + "'");
                    if(currentPage == i)
                        buf.append(" selected ");
                    buf.append(">第" + i + "頁</option>");
                }
                buf.append("</select>");
            }
            buf.append("</td></tr></table>");
            return (buf.toString());
        }


        /**
         *  向地址中加入 ? 或 &
         * @param strUrl
         *            ----網址.
         * @return 加了 ? 或 & 的網址.
         */
        protected String JoinChar(String strUrl) {
            String result = "";
            if (strUrl.equals("") || strUrl.length() <= 0) {
                return result;
            }
            if (strUrl.indexOf("?") < strUrl.length()) {
                if (strUrl.indexOf("?") > -1) {
                    if (strUrl.indexOf("&") < strUrl.length()) {
                        result = strUrl + "&";
                    } else {
                        result = strUrl;
                    }
                } else {
                    result = strUrl + "?";
                }
            } else {
                result = strUrl;
            }
            return result;
        }
    }
    有了自定義標簽,當然少不了用于處理標簽的tld,我們定義一個swsoft-struts.tld,代碼如下: 
    有了自定義標簽,當然少不了用于處理標簽的tld,我們定義一個swsoft-struts.tld,代碼如下: 
    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> 
    <taglib> 
    <tlibversion>1.0</tlibversion> 
    <jspversion>1.1</jspversion> 
    <shortname>out</shortname> 
    <uri>http://www.swsoftware.com/</uri> 
    <info>Tab Library for PaginatorTag</info> 
    <tag> 
        <name>paginator</name> 
        <tagclass>com.swsoftware.tags.PaginatorTag</tagclass> 
        <bodycontent>JSP</bodycontent> 
        <info>Returns a paginator</info> 
        <attribute> 
            <name>currentPage</name> 
            <required>true</required> 
            <rtexprvalue>true</rtexprvalue> 
        </attribute> 
        <attribute> 
            <name>url</name> 
            <required>true</required> 
            <rtexprvalue>true</rtexprvalue> 
        </attribute> 
        <attribute> 
            <name>totalPut</name> 
            <required>true</required> 
            <rtexprvalue>true</rtexprvalue> 
        </attribute> 
        <attribute> 
            <name>maxPerPage</name> 
            <required>true</required> 
            <rtexprvalue>true</rtexprvalue> 
        </attribute> 
        <attribute> 
            <name>showTotal</name> 
            <required>true</required> 
            <rtexprvalue>false</rtexprvalue> 
        </attribute> 
        <attribute> 
            <name>showAllPages</name> 
            <required>true</required> 
            <rtexprvalue>false</rtexprvalue> 
        </attribute> 
        <attribute> 
            <name>strUnit</name> 
            <required>true</required> 
            <rtexprvalue>false</rtexprvalue> 
        </attribute> 
    </tag> 
    </taglib> 
    好了,到現在我們開始來真正看一下jsp中的處理,我們寫一個computer.jsp,代碼如下:
    <%@ page import="com.util.BaseView,
                     com.attribute.Constants,
                     com.util.Page"%>
    <%@ page contentType="text/html;charset=GB2312" language="java" errorPage=""%>
    <%@ taglib uri="/WEB-INF/swsoft-struts.tld"prefix="swtag"%>
    <html>
    <head>
    <title></title>

    </head>
    <body bgcolor="#e3edfc">
    <div id="Layer1" style="position:absolute; left:1px; top:2px; width:780px; height:406px; z-index:1; background-color: #e3edfc; layer-background-color: #e3edfc; border: 1px none #000000;">
      <table width="100%" cellpadding="1">
        <tr>
          <td colspan="6">
          <table width="100%"  cellpadding="1">
        <tr>
          <td width="20%" align="center">BOOKNAME</td>
          <td width="10%" align="center">AUTHOR</td>
          <td width="10%" align="center">TYPE</td>
          <td width="30%" align="center">PUBLISH</td>
          <td width="10%" align="center">PRINCE</td>
          <td colspan="2" align="center">SELECT</td>
        </tr>
      <%
         String contextPath = request.getContextPath();
         String url=contextPath+"/computer.do";
        BaseView view=(BaseView)request.getAttribute(Constants.QUERY_RESULT);
        Page setpage=(Page)request.getAttribute("page");
        int currentPage=setpage.getCurrentPageNo();
          System.out.println("this is currentPage="+currentPage);
        int totalPut=setpage.getTotalSize();
          System.out.println("this is totalPut="+totalPut);
        int maxPerPage=setpage.getPageSize();
          System.out.println("this is maxPerPage="+maxPerPage);
        if(view.haveRecord()){
            String sBgcolor="";
            int length=view.getRecordCount();
            for(int i=0;i<length;i++){
               String type =view.getValue(i,2);
                if(type.equals("1")){
                    type="computer";
                }
                if(i%2!=0){
                    sBgcolor="#A5C6EB";
                }
                else{
                    sBgcolor="#B7D7EF";
                }
    %>
        <tr bgcolor=<%=sBgcolor%> height="10">
          <td align="center" ><%=view.getValue(i,1)%></td>
          <td align="center"><%=view.getValue(i,4)%></td>
          <td align="center"><%=type%></td>
          <td align="center"><%=view.getValue(i,5)%></td>
          <td align="center"><%=view.getValue(i,8)%></td>
          <td width="20%" align="center">BUY PARTICULAR</td>

        </tr>
    <%}}%>
      </table>
      </td>
        </tr>

        <tr>
        <swtag:paginator url="<%=url%>"
        currentPage="<%=currentPage%>"
        totalPut="<%=totalPut%>"
        maxPerPage="<%=maxPerPage%>"
        showTotal="true"
        showAllPages="true"
        strUnit="頁" />
        </tr>
      </table>
    </div>

    </body>
    </html> 
    到此為止,分頁的類基本完成,這樣的話可以在別的模塊都可以用這個標簽,同時在開發別的系統的時候這個標簽也可以使用,具有比較好的可移植性。這個數據庫是mysql的,要是oracle的,僅僅在PageCtBean類中的intiQuerySQL方法里面改成
    protected String intiQuerySQL(String sql, int startIndex, int size){
                StringBuffer querySQL = new StringBuffer();
                if (size != this.MAX_PAGE_SIZE) {
                    querySQL.append("select * from (select my_table.*,rownum as my_rownum from(")
                            .append(  sql)
                            .append(") my_table where rownum<").append(startIndex + size)
                            .append(") where my_rownum>=").append(startIndex);
                } else {
                    querySQL.append("select * from (select my_table.*,rownum as my_rownum from(")
                            .append(sql)
                            .append(") my_table ")
                            .append(") where my_rownum>=").append(startIndex);
                }
                return querySQL.toString();
            }
    就可以了。
    同時在數據庫中,返回當前頁需要顯示的數據,主要有以下方法,。
    a.使用mysql控制:
    select * from user
    order by Host
    limit m, n
    結果返回的是第m+1行到第n行的數據集。
    比如
    select * from user
    order by Host
    limit 1, 5
    返回的是第2行到第5行的數據集
    b.使用sqlserver
    SELECT *
    FROM (SELECT TOP m *
            FROM (SELECT TOP n *
                    FROM Customers) A
            ORDER BY CustomerID DESC) B
    ORDER BY CustomerID
    獲得的結果集數據為第n-m+1行到第n行。
    對整個過程的解釋:
    首先按照升序得到前n行的結果集A,然后按照降序從A中得到后m行的結果集B,最后按照升序對B進行重新排序,返回結果集。
    其中CustomerID為主鍵
    比如:
    SELECT *
    FROM (SELECT TOP 5 *
            FROM (SELECT TOP 10 *
                    FROM Customers) A
            ORDER BY CustomerID DESC) B
    ORDER BY CustomerID
    的意思就是返回包含第6行到第10行的數據結果集。
    c.使用Oracle: 
    select * from (select rownum r ,* from test) tt 
    where tt.r > 50 and tt.r <= 100; 
    希望大家有好方法的話能說一下,大家共同進步.
    posted on 2005-10-26 18:40 YangRj 閱讀(434) 評論(0)  編輯  收藏 所屬分類: 精華文章
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(2)

    隨筆分類(5)

    隨筆檔案(13)

    文章分類(14)

    文章檔案(34)

    Apache - Tech Online

    BLOG 收集

    BLOG地址

    DB2

    Eclipse

    IBM - Tech Online

    JAVA

    ORACLE

    OS

    好網址

    文學網站

    累了 聽聽歌曲吧

    論壇

    積分與排名

    • 積分 - 25621
    • 排名 - 1515

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费在线观看亚洲| 九九久久国产精品免费热6| 免费视频成人国产精品网站 | 亚洲jjzzjjzz在线观看| 猫咪免费观看人成网站在线| 无码人妻一区二区三区免费看| 精品国产免费观看一区| 亚洲av无码一区二区乱子伦as| 亚洲人成欧美中文字幕| 免费91麻豆精品国产自产在线观看| 四虎影视www四虎免费| 亚洲第一AV网站| 色偷偷尼玛图亚洲综合| 日韩精品人妻系列无码专区免费| 国产人成免费视频| 亚洲毛片一级带毛片基地| 美国免费高清一级毛片| 在线看片v免费观看视频777| 亚洲中文字幕成人在线| 亚洲最大的成人网站| 久久aⅴ免费观看| 亚洲精品麻豆av| 亚洲字幕AV一区二区三区四区| 色猫咪免费人成网站在线观看| 免费一级大黄特色大片| 亚洲日本久久一区二区va| 黄网站色视频免费在线观看的a站最新| 国产麻豆免费观看91| 亚洲熟妇无码久久精品| a级精品九九九大片免费看| 国产免费小视频在线观看| 亚洲第一成人在线| 99re视频精品全部免费| 亚洲日产韩国一二三四区| 久久精品国产亚洲av天美18| 波多野结衣中文字幕免费视频 | 亚洲综合久久1区2区3区| 中文在线观看国语高清免费| 国产成人在线免费观看| 国产精品亚洲片在线va| 免费人成在线观看网站品爱网|