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

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

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

    飛艷小屋

    程序--人生--哲學___________________歡迎艷兒的加入

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
  • 討論如何高效實現分頁。
  • -----------------------------------------------------------------------------------------

    在大量數據記錄的情況下,實現分頁功能如何做查詢速度最快???歡迎高手討論,一定給分。 ?
    --------------------------------------------------------------- ?
    ?
    每次查詢的時候只根據每頁顯示的個數,比如10,每次就只查10條記錄,其他的只要統計出來就行。 ?
    下一次翻頁,再查下10條,剩下的還只是個統計數。 ?
    --------------------------------------------------------------- ?
    ?
    滾東記錄 ?
    --------------------------------------------------------------- ?
    ?
    在很多論談上都有這個例子的。我也只是引用別人的而以。 ?
    ?
    ?
    ?
    <%@ ?page ?contentType="text/html;charset=8859_1" ?%> ?
    <% ?
    //變量聲明 ?
    java.sql.Connection ?sqlCon; ?//數據庫連接對象 ?
    java.sql.Statement ?sqlStmt; ?//SQL語句對象 ?
    java.sql.ResultSet ?sqlRst; ?//結果集對象 ?
    java.lang.String ?strCon; ?//數據庫連接字符串 ?
    java.lang.String ?strSQL; ?//SQL語句 ?
    int ?intPageSize; ?//一頁顯示的記錄數 ?
    int ?intRowCount; ?//記錄總數 ?
    int ?intPageCount; ?//總頁數 ?
    int ?intPage; ?//待顯示頁碼 ?
    java.lang.String ?strPage; ?
    int ?i; ?
    //設置一頁顯示的記錄數 ?
    intPageSize ?= ?2; ?
    //取得待顯示頁碼 ?
    strPage ?= ?request.getParameter("page"); ?
    if(strPage==null){//表明在QueryString中沒有page這一個參數,此時顯示第一頁數據 ?
    intPage ?= ?1; ?
    } ?
    else{//將字符串轉換成整型 ?
    intPage ?= ?java.lang.Integer.parseInt(strPage); ?
    if(intPage<1) ?intPage ?= ?1; ?
    } ?
    //裝載JDBC驅動程序 ?
    java.sql.DriverManager.registerDriver(new ?oracle.jdbc.driver.OracleDriver()); ?
    //設置數據庫連接字符串 ?
    strCon ?= ?"jdbc:oracle:thin:@linux:1521:ora4cweb"; ?
    //連接數據庫 ?
    sqlCon ?= ?java.sql.DriverManager.getConnection(strCon,"hzq","hzq"); ?
    //創建一個可以滾動的只讀的SQL語句對象 ?
    sqlStmt ?= ?sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY); ?
    //準備SQL語句 ?
    strSQL ?= ?"select ?name,age ?from ?test"; ?
    //執行SQL語句并獲取結果集 ?
    sqlRst ?= ?sqlStmt.executeQuery(strSQL); ?
    //獲取記錄總數 ?
    sqlRst.last(); ?
    intRowCount ?= ?sqlRst.getRow(); ?
    //記算總頁數 ?
    intPageCount ?= ?(intRowCount+intPageSize-1) ?/ ?intPageSize; ?
    //調整待顯示的頁碼 ?
    if(intPage>intPageCount) ?intPage ?= ?intPageCount; ?
    %> ?
    <html> ?
    <head> ?
    <meta ?http-equiv="Content-Type" ?content="text/html; ?charset=gb2312"> ?
    <title>JSP數據庫操作例程 ?- ?數據分頁顯示 ?- ?JDBC ?2.0 ?- ?Oracle</title> ?
    </head> ?
    <body> ?
    <table ?border="1" ?cellspacing="0" ?cellpadding="0"> ?
    <tr> ?
    <th>姓名</th> ?
    <th>年齡</th> ?
    </tr> ?
    <% ?
    if(intPageCount>0){ ?
    //將記錄指針定位到待顯示頁的第一條記錄上 ?
    sqlRst.absolute((intPage-1) ?* ?intPageSize ?+ ?1); ?
    //顯示數據 ?
    i ?= ?0; ?
    while(i<intPageSize ?&& ?!sqlRst.isAfterLast()){ ?
    %> ?
    <tr> ?
    <td><%=sqlRst.getString(1)%></td><td><%=sqlRst.getString(2)%></td> ?
    </tr> ?
    <% ?
    sqlRst.next(); ?
    i++; ?
    } ?
    } ?
    %> ?
    </table> ?
    第<%=intPage%>頁&nbsp;&nbsp;共<%=intPageCount%>頁&nbsp;&nbsp;<%if(intPage<intPageCount){%><a ?href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一頁</a><%}%>&nbsp;&nbsp;<%if(intPage>1){%><a ?href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一頁</a><%}%> ?
    </body> ?
    </html> ?
    <% ?
    //關閉結果集 ?
    sqlRst.close(); ?
    //關閉SQL語句對象 ?
    sqlStmt.close(); ?
    //關閉數據庫 ?
    sqlCon.close(); ?
    %> ? ? ?
    ?
    --------------------------------------------------------------- ?
    ?
    簡單方法如下: ?
    int ?curpage=1;//當前頁 ?
    int ?page_record=20;//每頁顯示的記錄數 ?
    //顯示第1000頁的記錄,用下面的方法 ?
    curpage=1000; ?
    rs.executeQuery("select ?top ?"+page_record+" ?* ?from ?tablename ?where ?id ?not ?in ?(select ?top ?"+(curpage*page_record)+" ?id ?from ?tablename ?order ?by ?id ?desc) ?order ?by ?id ?desc"); ?
    本查詢語句得到的是所要顯示的1000頁的20條記錄,大致思路為—— ?
    子查詢排除前999*20(頁數*每頁記錄數)條記錄,父查詢則對余下的記錄進行降序排列 ?
    --------------------------------------------------------------- ?
    ?
    <%@ ?page ?contentType="text/html;charset=8859_1" ?%> ?
    <% ?
    //變量聲明 ?
    java.sql.Connection ?sqlCon; ?//數據庫連接對象 ?
    java.sql.Statement ?sqlStmt; ?//SQL語句對象 ?
    java.sql.ResultSet ?sqlRst; ?//結果集對象 ?
    java.lang.String ?strCon; ?//數據庫連接字符串 ?
    java.lang.String ?strSQL; ?//SQL語句 ?
    int ?intPageSize; ?//一頁顯示的記錄數 ?
    int ?intRowCount; ?//記錄總數 ?
    int ?intPageCount; ?//總頁數 ?
    int ?intPage; ?//待顯示頁碼 ?
    java.lang.String ?strPage; ?
    int ?i; ?
    //設置一頁顯示的記錄數 ?
    intPageSize ?= ?25; ?
    //取得待顯示頁碼 ?
    strPage ?= ?request.getParameter("page"); ?
    if(strPage==null){//表明在QueryString中沒有page這一個參數,此時顯示第一頁數據 ?
    intPage ?= ?1; ?
    } ?
    else{//將字符串轉換成整型 ?
    intPage ?= ?java.lang.Integer.parseInt(strPage); ?
    if(intPage<1) ?intPage ?= ?1; ?
    } ?
    //裝載JDBC驅動程序 ?
    ?
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); ?
    //java.sql.DriverManager.registerDriver(new ?oracle.jdbc.driver.OracleDriver()); ?
    //設置數據庫連接字符串 ?
    strCon ?= ?"jdbc:odbc:test"; ?
    //連接數據庫 ?
    sqlCon ?= ?java.sql.DriverManager.getConnection(strCon,"ApsuiteUser","uwerinfo"); ?
    //創建一個可以滾動的只讀的SQL語句對象 ?
    ?
    //sqlStmt=sqlCon.createStatement(); ?
    sqlStmt ?= ?sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY); ?
    //準備SQL語句 ?
    strSQL ?= ?"select ?lsh,files ?from ?t_sys"; ?
    //執行SQL語句并獲取結果集 ?
    sqlRst ?= ?sqlStmt.executeQuery(strSQL); ?
    //獲取記錄總數 ?
    sqlRst.last(); ?
    intRowCount ?= ?sqlRst.getRow(); ?
    ?
    //記算總頁數 ?
    intPageCount ?= ?(intRowCount+intPageSize-1) ?/ ?intPageSize; ?
    ?
    //調整待顯示的頁碼 ?
    if(intPage>intPageCount) ?intPage ?= ?intPageCount; ?
    %> ?
    <html> ?
    <head> ?
    <meta ?http-equiv="Content-Type" ?content="text/html; ?charset=gb2312"> ?
    <title>JSP數據庫操作例程 ?- ?數據分頁顯示 ?- ?JDBC ?2.0 ?- ?Oracle</title> ?
    </head> ?
    <body> ?
    <table ?border="1" ?cellspacing="0" ?cellpadding="0"> ?
    <tr> ?
    <th>姓名</th> ?
    <th>年齡</th> ?
    </tr> ?
    <% ?
    if(intPageCount>0){ ?
    //將記錄指針定位到待顯示頁的第一條記錄上 ?
    sqlRst.absolute((intPage-1) ?* ?intPageSize ?+ ?1); ?
    //顯示數據 ?
    i ?= ?0; ?
    while(i<intPageSize ?&& ?!sqlRst.isAfterLast()){ ?
    %> ?
    <tr> ?
    <td><%=sqlRst.getString(1)%></td> ?
    <td><%=sqlRst.getString(2)%></td> ?
    </tr> ?
    <% ?
    sqlRst.next(); ?
    i++; ?
    } ?
    } ?
    %> ?
    </table> ?
    第<%=intPage%>頁&nbsp;&nbsp;共<%=intPageCount%>頁&nbsp;&nbsp;<%if(intPage<intPageCount){%><a ?href="dbtest.jsp?page=<%=intPage+1%>">下一頁</a><%}%>&nbsp;&nbsp;<%if(intPage>1){%><a ?href="dbtest.jsp?page=<%=intPage-1%>">上一頁</a><%}%> ?
    </body> ?
    </html> ?
    <% ?
    //關閉結果集 ?
    sqlRst.close(); ?
    //關閉SQL語句對象 ?
    sqlStmt.close(); ?
    //關閉數據庫 ?
    sqlCon.close(); ?
    %> ? ?
    ?
    public ?class ?pageControl ?
    { ?
    ?? ?? ?? ??public ?int ?curpage ?; ? ?
    ?? ?? ?? ??public ?int ?maxpage ?; ? ?
    ?? ?? ?? ??public ?int ?maxrowcount ?; ? ?
    ?? ?? ?? ??public ?int ?rowsperpage ?; ? ?
    ?? ?? ?? ?? ?
    ?? ?? ?? ?? ?
    ?? ?? ?? ?? ?? ?? ?? ??public ?void ?calMaxPage() ? ?
    ?? ?? ?? ?? ? ? ?{ ? ? ? ?? ?? ?? ?? ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if ?(this.maxrowcount ?% ?this.rowsperpage==0) ?
    ?? ?? ?? ?? ?? ?? ?? ??{ ?
    ?? ?? ?? ?? ?? ?? ?? ??this.maxpage ?= ?this.maxrowcount/this.rowsperpage; ?
    ?? ?? ?? ?? ?? ?? ?? ??} ?
    ?? ?? ?? ?? ?? ?? ?? ??else ?
    ?? ?? ?? ?? ?? ?? ?? ??{ ?
    ?? ?? ?? ??this.maxpage ?= ?this.maxrowcount/this.rowsperpage ?+ ?1; ?? ?? ?? ?? ?? ?? ?? ?? ?
    ?? ?? ?? ?? ?? ?? ?? ??} ?
    ?? ?? ?? ??} ?
    ?? ?? ?? ??} ?
    jsp中: ?
    pageControl ?pageCtl=new ?pageControl(); ?
    ? ? ? ? ? ? ? ?pageCtl.rowsperpage=10;//每頁顯示的行數 ?
    ? ? ? ? ? ? ? ?int ?pageNo=1; ?
    ?
    ? ? ? ? ? ? ? ?if ?(request.getParameter("page")!=null) ? ?
    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??{ ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?pageNo=Integer.parseInt(request.getParameter("page")); ?
    ? ? ? ? ? ? ? ? ? ? ? ?} ?
    ?
    ? ? ? ? ? ? ? ?pageCtl.curpage=pageNo;//當前頁 ?
    ? ? ? ?pageCtl.maxrowcount=從數據庫中取得的要顯示出來的記錄數 ?
    ? ? ? ? ?pageCtl.calMaxPage();//調用方法 ?
    ?<%if(pageCtl.curpage==1){ ?out.print(" ?首頁 ?上一頁"); ? ? ?}else{ ? ?%> ?
    ? ? ? ?<A ?HREF="<%=global_usermanage%>?flag=<%=flag%>&userid1=<%=userid1%>">首頁</A> ?<A ?HREF="<%=global_usermanage%>?page=<%=pageCtl.curpage-1%>&flag=<%=flag%>&userid1=<%=userid1%>">上一頁</A> ?
    ? ? ? ?<%}%> ?
    ? ? ? ?<%if(pageCtl.curpage==pageCtl.maxpage){ ?out.print("下一頁 ?尾頁"); ? ? ?}else{ ? ?%> ?
    ? ? ? ?<A ?HREF="<%=global_usermanage%>?page=<%=pageCtl.curpage+1%>&flag=<%=flag%>&userid1=<%=userid1%>">下一頁</A> ?<A ?HREF="<%=global_usermanage%>?page=<%=pageCtl.maxpage%>&flag=<%=flag%>&userid1=<%=userid1%>">尾頁</A> ?
    ? ? ? ?<%}%> ?
    ? ? ? ?每頁<%=pageCtl.rowsperpage%>行 ?共<%=pageCtl.maxrowcount%>行 ?第<%=pageCtl.curpage%>頁 ?
    ? ? ? ?共<%=pageCtl.maxpage%>頁 ?
    //over ?
    ?
    ?
    ?
    --------------------------------------------------------------- ?
    ?
    ?
    Oracle中: ?
    采用 ?top ?n ?方法 ?
    select ?* ? ?
    ? ?from ?(select ?item_code, ?rownum ?rno ?
    ? ? ? ? ? ? ? ? ? ?from ?epd_item_master ?
    ? ? ? ? ? ? ? ? ?where ?rownum ?<= ?10041 ?
    ? ? ? ? ? ? ? ? ?order ?by ?item_code) ?
    ?where ?rno ?>= ?10020; ?
    ?
    可取出 ?10020-10041條紀錄 ?
    ?
    程序使用時課改寫一下(我在bean中實現,效果很好,十幾萬條紀錄的表,查詢速度很快) ?
    " ?
    select ?* ?
    from ?(select ?HXH_TNAME.*, ?rownum ?rno ? ?
    ? ? ? ? ? ?from ?("+SQLstr+") ?HXH_TNAME ? ?


    返回目錄
  • posted on 2006-08-07 13:10 天外飛仙 閱讀(272) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 成人免费视频一区二区| 在线观看亚洲免费| 99视频有精品视频免费观看| 久久久久亚洲AV成人网人人软件| 免费无遮挡无遮羞在线看| 国产成人3p视频免费观看 | 国产精品jizz在线观看免费| 亚洲天然素人无码专区| 在线免费观看毛片网站| 看亚洲a级一级毛片| 亚洲第一区在线观看| 巨胸喷奶水www永久免费| 精品国产_亚洲人成在线高清| 在线看片免费人成视频福利| 亚洲精品自产拍在线观看动漫| 污视频在线免费观看| 91天堂素人精品系列全集亚洲| 四虎在线最新永久免费| 亚洲中文字幕无码久久| 亚洲日韩在线第一页| 国产成人久久AV免费| 亚洲制服丝袜中文字幕| 国产美女a做受大片免费| 中国在线观看免费的www| 亚洲视频在线免费播放| 成人免费看片又大又黄| 一个人免费观看日本www视频| 亚洲av无码潮喷在线观看| 国产h肉在线视频免费观看| 亚洲精品无码少妇30P| 亚洲综合伊人久久大杳蕉| 1000部拍拍拍18勿入免费视频下载| 亚洲色欲色欱wwW在线| 亚洲日韩国产一区二区三区| 2022久久国产精品免费热麻豆| 亚洲av纯肉无码精品动漫| 国产av天堂亚洲国产av天堂| 成全影视免费观看大全二| 三级毛片在线免费观看| 国产精品高清视亚洲一区二区| 亚洲色婷婷一区二区三区|