如果是 ORACLE,那么 ORACLE 已经提供了分页的处理机制!!(rownum)
如果是其他,例如 sql server,可以使用 TOP,但要记住上一页最后一条记录的 ID!

解决方案 »

  1.   

    Connection m_conn = null;
    PreparedStatement prepstmt = m_conn.prepareStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY,strSql);
    prepstmt.setFetchSize(10);  //10条纪录
    ResultSet rs = prepstmt.executeQuery() ;试试看吧。
      

  2.   

    楼上的.具体的解决方法呢?
    我上次做了一个sqlserver 的分页.效果不是很理想..
      

  3.   

    " SELECT TOP " + pageRecords + " * FROM " + dataTableName +
                     " WHERE obj_id NOT IN (SELECT TOP "
                   + currPage * pageRecords + " obj_id FROM " + dataTableName +
                     "   ORDER BY obj_id ASC )  ORDER BY obj_id ASC ";pageRecords : 条数
    dataTableName : 数据库表名
    currPage  :当前页数记住这句话,不敢说是最好的,但绝对是最经典的 ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  4.   

    你自己研究一下吧
    //PageCt.java 分页的类
    /*
    *** @version ***********
    *** Created on 2001年6月25日, 下午14:41
    **************************************
    */
    package vod;
    import java.sql.*;
    import java.util.*; public class PageCt
    {
    private long l_start; //开始纪录
    private long l_end; //结束纪录
    private long l_curpage; //当前页数
    private long l_totalnum;//总记录数
    private int int_num=5; //每页10条
    private long l_totalpage; //总的页数
    public void Init(long currentpage,long totalnum)
    {
    l_curpage = currentpage;
    l_totalnum = totalnum;
    if (currentpage>=0)
    {
    if (currentpage>=(long)Math.ceil((double)l_totalnum/(double)int_num))
    l_curpage = (long)Math.floor((double)l_totalnum/(double)int_num);
    else
    l_curpage = currentpage;
    }
    else
    {
    l_curpage = 0;
    }
    l_start = l_curpage * int_num;
    l_end = l_start + int_num;
    if (l_end > l_totalnum)
    l_end = l_totalnum;
    l_totalpage = (long)Math.ceil((double)l_totalnum/(double)int_num);
    }
    public long getCurpage()
    {
    return l_curpage;
    }
    public long getPrepage()
    {
    if (l_curpage-1>=0)
    {
    return l_curpage-1;
    }
    else
    {
    return 0;
    }
    }
    public long getNextpage()
    {
    if (l_curpage+1<=l_totalpage)
    {
    return l_curpage+1;
    }
    else
    {
    return l_totalpage;
    }
    }
    public long getTotalnum()
    {
    return l_totalnum;
    }
    public long getTotalpage()
    {
    return l_totalpage;
    }
    public long getStart()
    {
    return l_start;
    }
    public long getEnd()
    {
    return l_end;
    }
    };
    ===============================================
    //调用例子
    <%
    /*
    *** @author 马毅 ***********
    *** @version ***********
    *** Created on 2001年6月12日, 下午17:13
    **************************************
    */
    <%@ page import="java.sql.*"%>
    <%@ page import="java.lang.*"%>
    <%@ page contentType="text/html;charset=gb2312" %>
    <jsp:useBean id="PageCount" scope="page" class="kstest.PageCt" />
    <jsp:useBean id="sqlbean" scope="page" class="vod.sql_data" />
    <html>
    <head>
    <TITLE>测试</TITLE>
    <STYLE>
    body,table{font-size:9pt}
    A:link {
    COLOR: #000084; TEXT-DECORATION: none
    }
    A:visited {
    COLOR: #000084; TEXT-DECORATION: none
    }
    A:hover {
    COLOR: black; TEXT-DECORATION: underline
    }
    .ourfont {
    FONT-SIZE: 9pt
    }
    </STYLE>
    </head>
    <body bgcolor=#eff3ff>
    <center>
    <font color=#000084><h3>Test for Test</h3></font>
    <hr width=600 color=#b5dbff>
    <br>
    <%
    ResultSet rs0 = sqlbean.executeQuery("select count(*) from UserList );
    rs0.next();
    long data_num=rs0.getLong(1);
    long Current_Page = 0;
    String currentpage=(String)request.getParameter("currentpage");
    if (currentpage != null && !currentpage.equals(""))
    {
    Current_Page = Integer.parseInt(request.getParameter("currentpage"));
    }
    String Query_Page=(String)request.getParameter("Query_Page");
    if (Query_Page!=null && !Query_Page.equals(""))
    {
    Current_Page = Integer.parseInt(request.getParameter("Query_Page"))-1;
    }
    PageCt.Init(Current_Page,data_num);
    long l_start = PageCt.getStart();
    long l_end = PageCt.getEnd();
    //查询记录
    ResultSet rs = sqlbean.executeQuery("select * from UserList " );
    long i=0;
    while((i<l_start) && rs.next())
    {
    i++;

    //输出查询结果
    long j=0;
    while(rs.next() && (i<l_end))
    {
    j=i+1;
    String col2 = rs.getString(2);
    String col3 = rs.getString(3);
    String col4 = rs.getString(4);
    String col5 = rs.getString(5);
    String col6 = rs.getString(6);
    String col7 = rs.getString(7);
    String col8 = rs.getString(8);
    //打印所显示的数据
    out.println("<table border=0 width=600>");
    out.println("<tr><td colspan=2><font color=#000084>" + j + "、"+(col2==null?"":col2)+"</font></td></tr><tr><td colspan=2>答案:"+(col3==null?"":col3)+"</td></tr>");
    out.println("<tr><td>  选项1:"+(col4==null?"":col4)+"</td><td>  选项2:"+(col5==null?"":col5)+"</td></tr>");
    out.println("<tr><td>  选项3:"+(col6==null?"":col6)+"</td><td>  选项4:"+(col7==null?"":col7)+"</td></tr>");
    if (col8!=null && !col8.equals(""))
    {
    out.println("<tr><td colspan=2>备注:"+col8+"</td></tr>");
    }
    out.println("</table><br>");
    i++;
    }
    %>
    <table width=600>
    <tr bgcolor=#b5dbff>
    <form method=GET action=index.jsp>
    <td width=80 align=center valign=bottom>共 <%=PageCt.getTotalnum()%> 条</td>
    <td width=80 align=center valign=bottom><%=PageCt.getCurpage()+1%>/<%=PageCt.getTotalpage()%> 页</td>
    <td width=120 align=center>查看第 <input type=text name=Query_Page size=3> 页</td>
    <td width=50 align=center valign=bottom><a href=index.jsp?currentpage=<%=PageCt.getPrepage()%>>上页</a></td>
    <td width=50 align=center valign=bottom><a href=index.jsp?currentpage=<%=PageCt.getNextpage()%>>下页</a>
    </td>
    </tr>
    </table>
    <br><br><br>
    <table cellspacing=20>
    <tr>
    <td>问题包含<input type=text name=question_str size=10 value=<% if (question_str != null) out.println(question_str); %> ></td>
    <td>答案包含<input type=text name=answer_str size=10 value=<% if (answer_str != null) out.println(answer_str); %> ></td>
    <td>选项包含<input type=text name=sel_str size=10 value=<% if (sel != null) out.println(sel); %> ></td>
    </tr>
    <tr>
    <td colspan=3 align=center><input type=submit value=查询></td>
    </tr>
    </form>
    </table>
    <br><br>
    <a href="insert.jsp">添加</a>
    <center>
    </body>
    </html>
      

  5.   

    楼上还是一次取出所有记录.要是有上几百万条.....
    分页一个是为了好看,另一个是为了查询的效率.这也一来只会增加系统开销... ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  6.   

    zez(思恩 为老婆多挣钱 鹤清风) :如果这个数据库是 MySQL 不支持子查询 怎么办 ?
      

  7.   

    你可以参考用xml将所有结果传送到客户机,然后翻页就用xml来实现。可以看看xsl方面的书。不过这将占用客户端的内存空间,如果数据量大的话,就没必要这样做了
      

  8.   

    http://www.hnitline.com/bbs/dispbbs.asp?boardID=18&ID=807目前最好的分页技术思想确实很好,看看就知道了!
      

  9.   

    在新版本的JSPStudio中,通过向导,只要输入一个文件名和选择数据源,自动产生所有数据库操作和表格分页显示,下载地址:ftp://162.105.80.43/incoming/例如:输入文件名:TEST,并通过ODBC选择数据源,自动产生如下6个文件:
    TEST.java
    TESTAction.java
    TESTDAO.java
    TESTForm.java
    TEST.jsp
    TESTOut.jsp代码见:
    http://expert.csdn.net/Expert/topic/2228/2228055.xml?temp=.1732599
      

  10.   

    package hzdq.fdjc.Common;import java.sql.*;
    import java.util.*;/**
     * Title:分页
     * Description:
     * Copyright:    Copyright (c) 2004
     * Company:
     * author:颜喜班
     * @version 1.0
     */
    public class SplitPager
    {
      /*
       * _sql_str:传入的sql语句
       * _total_records: 总记录数目
       * _pageSize: 每页显示的记录数目
       * _page: 所分的逻辑页数
       */
    private Connection con=null;
    private Statement stmt=null;
    private ResultSet rs=null;
    private ResultSetMetaData rsmd=null;
    private String _sql_str;
    private int _total_records;
    private int _pages;
    private int _pagesize;
    public void setConnection(Connection con)
    {
    this.con=con;
    if (this.con == null)
                System.out.println("Failure to get a connection!");
    else
    System.out.println("Success to get a connection!");
    }
    public void initialize(String sqlStr,int pageSize)
    {
    this._sql_str=sqlStr;
    this._pagesize=pageSize;
    try{  
    stmt=this.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);  
                    rs=stmt.executeQuery(this._sql_str); 
    rsmd=rs.getMetaData();
    if (rs!=null)
    {
    rs.last();
    this._total_records = rs.getRow();
    rs.first();
    this._pages = (this._total_records - 1) / this._pagesize + 1;

    }  
               catch(SQLException  e){System.out.println(e.toString()); } 
    }
    public  Vector  getPage(int ipage){ 
              Vector  vData=new  Vector();
              int  n=ipage;  
              int  m=0;  
              m=(n-1)*this._pagesize+1;  
      try{
    if (rs!=null)
    {
    rs.absolute(m);
    for(int i=0;i<this._pagesize;i++){
    String[] sData=new String[rsmd.getColumnCount()];
    for(int j=0;j<rsmd.getColumnCount();j++)
    {
    sData[j]=rs.getString(j+1);
    }
    if (sData==null)
    {
    break;
    }
    vData.addElement(sData);
    rs.next();

    }            
                    rs.close();  
        stmt.close(); 
                    }  
               catch(SQLException  e){System.out.println(e.toString()); } 
               return  vData;  
    }  
    public int getPages()
        {
            return this._pages;
        }
    public int getTotalRecords()
        {
            return this._total_records;
        }}